0

次のコードがあります

    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の初心者に取り組んでいます。

すべての助けをいただければ幸いです。ありがとう。

4

2 に答える 2

0

何を達成しようとしているのかわかりませんが、フォルダー内の多くのファイルをループしたい場合は、linuxfindコマンドを使用できます。

あなたの状況の例は次のとおりです。

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 {} \;
于 2013-05-30T08:46:38.437 に答える
0

シェルにグロビングを任せることもできます。

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

次に、あなたの python スクリプトで:

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

ただし、sys.argv で引数「path/to/files/*.CSV」を 1 つしか受け取ることができないため、これは Windows では機能しません。

于 2013-05-30T09:25:44.413 に答える