Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中,一次在文件夹中的一组文件上运行Python代码_Python_Linux_Csv - Fatal编程技术网

在linux中,一次在文件夹中的一组文件上运行Python代码

在linux中,一次在文件夹中的一组文件上运行Python代码,python,linux,csv,Python,Linux,Csv,我有以下代码 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".jo

我有以下代码

    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”的文件夹中包含的所有文件上执行它。我正在开发Ubuntu12.04,是linux的新手


所有的帮助都将不胜感激。谢谢。

我不知道您想要实现什么,但是如果您想循环浏览文件夹中的大量文件,可以使用linux
find
命令

您的情况中的一个例子是:

cd /path/to/folder/CSV
find . -name *.csv -exec your_python_script.py {} \;
这将找到所有
.csv
文件,并在每个文件上运行python脚本

确保您有
#/bin/env python
在文件顶部,运行
sudo chmod+x_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)
在您的
CSV
文件夹中将其另存为
test\u python\u script.py
。然后运行:

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

您也可以简单地让shell为您执行全局搜索:

python myscript.py path/to/files/*.CSV
然后在python脚本中:

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

但是,这在Windows中不起作用,因为在sys.argv中,您只会收到一个参数“path/to/files/*.CSV”。

我可以合理地确定,您确实不想覆盖从glob获得的最后一个文件名,因此缩进被破坏。你能解释一下你实际上想要实现什么吗?我的问题是:如何对保存在director中的所有文件执行fnadder.py中保存的上述代码,而不使用任何扩展名。代码基本上是将文件名添加到CSV文件的lsat列中。Thansk当我单独执行代码时,代码运行良好,如:abdullah@idiotbox:~/Desktop/THCM/job/test$python fnadder.py 075C-0001但是有大约200个文件,我想一次性完成。我已经删除了扩展名.csv,因为我将在最后一列添加文件名。所以文件名是:0750-0004、0750-0002,以此类推大约200个。谢谢你的关心和宝贵的时间。