2012-11-11 180 views
-5

我在這個網站上發現了一些有用的東西,但我的輸入文件與已發佈的示例不同,我無法以有效的方式實現跳躍。一個輸入文件到多個輸出文件

我輸入文件看起來像這樣:

sample_dude data1 data2 data3 data4 
sample_lady data5 data6 data7 data8 
sample_dude data9 data10 data11 data12 
sample_child data13 data14 data15 data16 

我想創建一個與所有的數據列每個樣本單獨的文件。例如,一個文件將被稱爲sample_dude.txt,看起來像這樣:

data1 data2 data3 data4 
data9 data10 data11 data12 

有不明數量的樣本,但始終只是四個數據列。

任何幫助極大的讚賞。謝謝。 PS:我想在python中做到這一點。

回答

0

例如像這樣:

with open('input.txt') as input: 
    for line in input: 
     name, data = line.split(' ', 1) 

     with open('{0}.txt'.format(name), 'a') as f: 
      f.write(data) 
4

您可以通過打開文件並在每一行循環來做到這一點。我不會爲你寫代碼,但是這是一個算法。

# Open the input file 
# Loop through each line of the file 
    # Split the line into the file name and the data 
    # Open the file name and append the data to the end 

您也可以在打開文件之前保存所有文件的數據。如果你有很多多行文件,這會更快。

+0

+1不寫代碼;另一方面我無法抗拒。 – poke

+0

我可以做這個列表中的每一件事,但最後一部分「打開文件名並將數據追加到最後」。我可以打開輸入文件,將每行分成幾部分,然後將這些部分寫入A文件,但我不知道如何寫出多個文件(或打開多個文件,我沒有創建它)。 – user1265669

+0

@ user1265669:每個輸出文件的名稱將對應於每行上讀取的第一個項目 - 所以打開一個名稱基於該文件的文件。如果你想添加數據到最後,以追加模式打開它。 – martineau

0

嘗試這樣的事情?拆分將所有文件名映射到列的列表,爲每個文件創建和寫入線。

with open('someFile.txt') as f: 
    out = {} 
    for line in f: 
    key, data = line.split(' ', 1)   
    if not key in out.keys(): 
     out[key] = [] 
    out[key].append(data) 

for k, v in out.items(): 
    with open(k+'.txt', 'w') as f: 
    f.writelines(v)