我有一个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