2010-04-09 56 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

相关问题