在目录中对所有文件运行Python脚本
我有一个Python脚本,它可以读取一个文本格式的csv文件,然后生成一个播放列表文件。不过我现在只能一次处理一个文件,比如:
python playlist.py foo.csv foolist.txt
但是我有一个文件夹,里面有很多文件需要制作成播放列表,每个播放列表的名字都不一样,有时候文件的数量也不同。
到目前为止,我考虑过先创建一个txt文件,把文件夹里所有文件的名字列出来,然后再逐行处理这些名字。不过我知道肯定有更简单的方法可以做到这一点。
4 个回答
4
这是一个单独的文件夹,还是里面还有其他文件夹呢?
举个例子:
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')])
6
只需要用一个for循环配合星号通配符,确保在文件名中有空格时正确加上引号。
for file in *.csv; do
python playlist.py "$file" >> outputfile.txt;
done
11
for f in *.csv; do
python playlist.py "$f" "${f%.csv}list.txt"
done
这样做可以吗?这段代码会把foo.csv放进foolist.txt里,把abc.csv放进abclist.txt里。
还是说你想把它们都放在同一个文件里?