2013-05-30 42 views
0

在同一時間運行在一個文件夾中的一堆文件的Python代碼,我有以下代碼在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的新手。

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

+3

問題是什麼? –

+0

我相當肯定你並不是真的只想覆蓋你從glob得到的最後一個文件名,所以你的縮進被打破了。你能解釋一下你實際想要達到的目標嗎? –

+0

我的問題是:如何將保存在fnadder.py中的上述代碼執行到沒有任何擴展名的所有保存在director中的文件。代碼基本上是將文件名添加到CSV文件的lsat列。 Thansk –

回答

0

你也可以簡單地讓殼做通配你:

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

然後在您的python腳本:

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

但這會不會工作在Windows ,因爲你只會在sys.argv中收到一個參數「path/to/files/*。CSV」。

+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.pyCSV文件夾中。然後運行:

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

我已經刪除了擴展名.csv,因爲我將在最後一列添加文件名。所以文件名是:0750-0004,0750-0002等200左右。感謝您的關心和寶貴的時間。 –