在linux中,一次对文件夹中的一堆文件运行Python代码

2024-04-26 07:42:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码

    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的新手。你知道吗

所有的帮助将不胜感激。谢谢。你知道吗


Tags: 代码inimportforclosedatasysline
2条回答

您也可以简单地让shell为您执行全局绑定:

python myscript.py path/to/files/*.CSV

然后在python脚本中:

[...]
for filename in sys.argv[1:]:
    # do stuff...

但是,这在Windows中不起作用,因为在Windows中只会收到一个参数“path/to/files/*.CSV”系统argv. 你知道吗

我不知道你想实现什么,但是如果你想在一个文件夹中循环浏览很多文件,你可以使用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.pyCSV文件夹中。然后运行:

cd /path/to/folder/CSV
chmod +x test_python_script.py
find . -exec test_python_script.py {} \;

相关问题 更多 >