2014-05-22 29 views
1

我有大約45,000個文件。我的目的是從每個文件中提取一個特定的行並將其累積到單個文件中。從多個文件中讀取一行並寫入一個文件

我試圖使用glob.glob,但問題是,在這個模塊中,文件的順序似乎是混合的。

filin= diri+ '*.out' 
list_of_files = glob.glob(filin) 
print list_of_files 
with open("A.txt", "w") as fout: 
    for fileName in list_of_files: 
     data_list = open(fileName, 'r').readlines() 
     fout.write(data_list[12]) 

以上是我使用的代碼。主要是我在這個論壇上從別人那裏借用了一些代碼。

我想按順序讀取所有「.out」文件,每個文件包含一分鐘的數據,例如,一個文件包含2014/1/1/00:00的數據,因此文件具有數據在2014/1/1/00:01。所以按順序讀取這些文件是非常重要的。但是,當我使用glob.glob並打印list_of_files時,文件順序看起來相當混雜,我能否解決這個問題?

另外,如上所示,我想從每個文件的頂部讀取第12行,但結果反覆顯示「索引不足」。

這個問題看起來不是很有條理。 。

P.S文件的名稱是如:Data_201308032343.out,Data_201308032344.out,Data_201308032345.out ......

謝謝。

回答

1
list_of_files = sorted(glob.glob(filin)) 

data_list [12]讀取文件的第13行,因爲它是一個零索引列表。這可能是「索引超出範圍」例外的原因。

+0

謝謝大家的斯堪的納維亞 – Isaac

+0

是的,我的目的是要讀取文件的13號線與DATA_LIST [12]。謝謝你的回覆斯堪的納維亞。 – Isaac

1

os.listdir documentation所述,目錄條目以任意順序返回。如果你想申請一個特定的順序,你需要確保自己:

list_of_filenames = glob.glob(input_fileglob) 
sorted_list_of_filenames = sorted(list_of_filenames) 

with open("A.txt", 'w') as outfile: 
    for filename in sorted_list_of_filenames: 
     data_list = open(filename).readlines() 
     outfile.write(data_list[12]) 
+0

我有一個問題,在bignose和斯堪的納維亞人的幫助下,我可以按順序對文件名進行排序。但是,我仍然面臨「.write(data_list [12])」命令的「索引超出範圍」錯誤。你有什麼想法嗎?謝謝。 – Isaac

+0

如果您有問題,請提出一個新問題。同時,請爲此問題選擇一個答案。 – bignose

相關問題