2013-02-25 88 views
1

我有一個數據文件有兩列,我想把它放到一個單列中。把兩列放到一個

既然我現在已經分裂列 開放( 「的test.txt」)作爲input_data:

for line in input_data: # This keeps reading the file 
    li=line.strip() 
    #print repr(line) #Each line is being returned as a string 
    column = line.split() 
    # print column 
    nb1=column[0] 
    nb2=column[1] 

我如何繼續?

+0

你想在另一列的頂部有一列嗎?你想讓它們編織在一起,每行的第二個元素直接在第一個元素下面嗎? – Octipi 2013-02-25 10:24:58

+0

我有兩列,我想在第一列的最後一個數字之後添加第二列。所以我需要所有的數字在一個單列中。例如,如果我有兩列,每列有十個數字,則需要一個包含二十個數字的列作爲輸出 – user2106755 2013-02-25 10:39:08

+0

請在您的答案中提供一個清晰的輸入示例和預期輸出。 – 2013-02-25 10:48:30

回答

1

您可以在列上使用Python's slicing notation+運算符結合使用。例如,加入一個列表的第一個兩個元件完成由:

=>>> l=["a","b","c","d"] 
>>> a=[l[0]+l[1]]+l[2:] 
>>> a 
['ab', 'c', 'd'] 

a=[l[0]+l[1]]+l[2:]聯接(+)前兩個元素([l[0]+l[1]])與剩餘的列(l[2:])。

在你的代碼,它很可能是:

columns = [column[0]+ column[1]]+ column[2:] 
+0

實際上我需要(對不起,沒有說清楚)是把b放在一個(在你的例子中),這樣做一個列有兩個元素a,b – user2106755 2013-02-25 10:45:07

0

我改變NB1和NB2到列表和附加列值到每個加入「\ n」所以他們都寫上了一個新行。輸出文件具有一列,其中第2列的值位於第1列的值的頂部。此方法大部分適用,但如果處理的文件非常大,則此方法使用大量內存。如果這是一個問題,您可以通過兩次寫入輸出文件,先寫入第一列,然後寫入第二列。

nb1 = [] 
nb2 = [] 
with open('input.txt','r') as input_data: 
    for line in input_data: 
    column = line.strip().split() 
    nb1.append(column[0]+'\n') 
    if len(column) == 2: 
     nb2.append(column[1]+'\n') 
with open('output.txt','w') as f: 
    f.writelines(nb1) 
    f.writelines(nb2) 

如果你想在第一個元素下面的每一行中的第二個元素,你可以使用這個更簡單的內存更友好的語法。

with open('input.txt','r') as input_data: 
    with open('output.txt','w') as f: 
    for line in input_data: 
     column = line.strip().split() 
     f.write(column[0]+'\n') 
     f.write(column[1]+'\n') 
+0

非常感謝你的回答。但是,如果在列a中,我有例如10個數字,並且我想在這10個數字之後添加列b的數字(例如5個數字)以便具有15個數字的單個列c? – user2106755 2013-02-25 13:01:08

+0

我更新了我的答案以涵蓋此內容。只要檢查列的大小,如果它有兩個元素,然後將第二個元素附加到nb2。 – Octipi 2013-02-25 13:08:11

+0

非常感謝 – user2106755 2013-02-25 15:51:41