我有一個Python腳本,它讀取文本csv文件並創建一個播放列表文件。不過,我只能做一次一個,如:對目錄中的所有文件運行python腳本
python playlist.py foo.csv foolist.txt
不過,我需要製作成播放列表,具有不同名稱的文件目錄,有時不同數量的文件。
到目前爲止,我已經看過創建一個帶有目錄中文件所有名稱列表的txt文件,然後遍歷每一行,但是我知道必須有一個更簡單的方法來完成它。
我有一個Python腳本,它讀取文本csv文件並創建一個播放列表文件。不過,我只能做一次一個,如:對目錄中的所有文件運行python腳本
python playlist.py foo.csv foolist.txt
不過,我需要製作成播放列表,具有不同名稱的文件目錄,有時不同數量的文件。
到目前爲止,我已經看過創建一個帶有目錄中文件所有名稱列表的txt文件,然後遍歷每一行,但是我知道必須有一個更簡單的方法來完成它。
for f in *.csv; do
python playlist.py "$f" "${f%.csv}list.txt"
done
請問這樣做?這會將foo.csv放入abclist.txt中的foolist.txt和abc.csv中。
還是你想讓他們都在同一個文件?
正是我在感謝之後。 – S1syphus 2010-04-09 19:22:32
或只使用'。'作爲目錄名稱? – falstro 2010-04-09 16:36:35
@roe:如果在工作目錄中,是的。 – SilentGhost 2010-04-09 16:38:07
只需使用一個與星號水珠迴路,確保您恰當地引用東西空格的文件名
for file in *.csv; do
python playlist.py "$file" >> outputfile.txt;
done
它是一個單獨的目錄,或嵌套?
Ex。
topfile.csv
topdir
--dir1
--file1.csv
--file2.txt
--dir2
--file3.csv
--file4.csv
對於嵌套,你可以使用os.walk(topdir)
得到遞歸一個目錄中的所有文件,並顯示目錄。
你可以設置你的腳本接受迪爾斯或文件:
python playlist.py topfile.csv topdir
import sys
import os
def main():
files_toprocess = set()
paths = sys.argv[1:]
for p in paths:
if os.path.isfile(p) and p.endswith('.csv'):
files_toprocess.add(p)
elif os.path.isdir(p):
for root, dirs, files in os.walk(p):
files_toprocess.update([os.path.join(root, f)
for f in files if f.endswith('.csv')])
我會試一試,謝謝,這是一個有點脾氣劇本,因爲它是 – S1syphus 2010-04-09 19:23:33
*有的時候有比旁白更*這是什麼意思? – SilentGhost 2010-04-09 16:36:10
@davr;爲什麼你刪除bash標籤,也許他想使用它? – falstro 2010-04-09 16:41:06
對不起,我有bash標籤,因爲我試圖通過bash來做到這一點,因爲最終我想把可可前端換成bash。 我從文本文件中讀取的便宜黑客也在bash中。 – S1syphus 2010-04-09 20:10:40