我有以下代码
import sys
import glob
for filename in glob.glob(sys.argv[1]):
file = open(filename)
data = [line.rstrip() + "," + filename for line in file]
file.close()
file = open(filename, "w")
file.write("\n".join(data))
file.close()
现在我想在名为“CSV”的文件夹中包含的所有文件上执行它。我正在研究UBUNTU 12.04和Linux的新手。
所有的帮助将不胜感激。感谢。
答案 0 :(得分:0)
我不知道你想要实现什么,但如果你想循环浏览文件夹中的很多文件,你可以使用linux find
命令。
您的情况中的一个例子是:
cd /path/to/folder/CSV
find . -name *.csv -exec your_python_script.py {} \;
这将找到所有.csv
个文件并在每个文件上运行你的python脚本。
确保文件顶部有#!/bin/env python
并运行sudo chmod +x your_python_script.py
以使其可执行。
如果您没有.csv
扩展名,则可以执行以下操作:
cd /path/to/folder/CSV
find . -exec your_python_script.py {} \;
虽然会被警告 - 但这会在目录中的每个文件上运行 - CSV或其他。
另外,如果我正确理解你的脚本(它只是将文件名附加到最后一列),试试这个:
#!/bin/env python
import sys
import csv
filename=sys.argv[1]
output_filename='new-'+filename
output_rows = []
with open(filename, 'r') as inputfile:
with open(output_filename) as outputfile:
r = csv.reader(inputfile)
w = csv.writer(outputfile, lineterminator='\n')
for input_row in r:
output_row=input_row.append(filename)
output_rows.append(output_row)
w.writerows(output_rows)
将test_python_script.py
保存在CSV
文件夹中。然后运行:
cd /path/to/folder/CSV
chmod +x test_python_script.py
find . -exec test_python_script.py {} \;
答案 1 :(得分:0)
您也可以让shell为您执行globbing:
python myscript.py path/to/files/*.CSV
然后在你的python脚本中:
[...]
for filename in sys.argv[1:]:
# do stuff...
然而,这在Windows中不起作用,因为在sys.argv中只会收到一个参数“path / to / files / * .CSV”。