2013-02-25 87 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