簡體   English   中英

在Linux中一次對文件夾中的一堆文件運行Python代碼

[英]Run a Python code over a bunch of files in a folder at a time in linux

我有以下代碼

    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的新手。

所有幫助將不勝感激。 謝謝。

我不知道您要達到什么目的,但是如果您要循環瀏覽文件夾中的許多文件,則可以使用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)

將其另存為CSV文件夾中的test_python_script.py 然后運行:

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

您還可以簡單地讓外殼為您完成遍歷:

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

然后在您的python腳本中:

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

但是,這在Windows中將不起作用,因為您只會在sys.argv中收到一個參數“ path / to / files / *。CSV”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM