2010-04-09 90 views
4

我有一個Python腳本,它讀取文本csv文件並創建一個播放列表文件。不過,我只能做一次一個,如:對目錄中的所有文件運行python腳本

python playlist.py foo.csv foolist.txt 

不過,我需要製作成播放列表,具有不同名稱的文件目錄,有時不同數量的文件。

到目前爲止,我已經看過創建一個帶有目錄中文件所有名稱列表的txt文件,然後遍歷每一行,但是我知道必須有一個更簡單的方法來完成它。

+0

*有的時候有比旁白更*這是什麼意思? – SilentGhost 2010-04-09 16:36:10

+0

@davr;爲什麼你刪除bash標籤,也許他想使用它? – falstro 2010-04-09 16:41:06

+0

對不起,我有bash標籤,因爲我試圖通過bash來做到這一點,因爲最終我想把可可前端換成bash。 我從文本文件中讀取的便宜黑客也在bash中。 – S1syphus 2010-04-09 20:10:40

回答

7
for f in *.csv; do 
    python playlist.py "$f" "${f%.csv}list.txt" 
done 

請問這樣做?這會將foo.csv放入abclist.txt中的foolist.txt和abc.csv中。

還是你想讓他們都在同一個文件?

+0

正是我在感謝之後。 – S1syphus 2010-04-09 19:22:32

2

,如果您有目錄名,你可以使用os.listdir

os.listdir(dirname) 

,如果你想只選擇特定類型的文件,例如,只有你可以使用glob模塊csv文件。

+0

或只使用'。'作爲目錄名稱? – falstro 2010-04-09 16:36:35

+0

@roe:如果在工作目錄中,是的。 – SilentGhost 2010-04-09 16:38:07

3

只需使用一個與星號水珠迴路,確保您恰當地引用東西空格的文件名

for file in *.csv; do 
    python playlist.py "$file" >> outputfile.txt; 
done 
3

它是一個單獨的目錄,或嵌套?

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')]) 
+0

我會試一試,謝謝,這是一個有點脾氣劇本,因爲它是 – S1syphus 2010-04-09 19:23:33

相關問題