Python 将来自两个不同文件的数据合并为一个新文件

Python 将来自两个不同文件的数据合并为一个新文件,python,Python,我有两个数据表(星系列表),每个表中的元素数量相同,但列不同。我想合并这两个表,但当我尝试(下面的代码)时,我会从文件a中的列中获取所有数据,但表b的最后一个值会重复,反之亦然(取决于缩进)。如何从两个表中获得相应的值 a=open('data_tables/ZENS_flags.dat','r') b=open('IpacTableFromSource2.dat', 'r') c=open('type_2_new.dat','w') header1=a.readline() header1=

我有两个数据表(星系列表),每个表中的元素数量相同,但列不同。我想合并这两个表,但当我尝试(下面的代码)时,我会从文件a中的列中获取所有数据,但表b的最后一个值会重复,反之亦然(取决于缩进)。如何从两个表中获得相应的值

a=open('data_tables/ZENS_flags.dat','r')
b=open('IpacTableFromSource2.dat', 'r')
c=open('type_2_new.dat','w')

header1=a.readline()
header1=b.readline()



for line in a:
    line_a = line.strip()
    columns_a = line.split()

    for line in b:
        line_b=line.strip()
        columns_b=line.split()

        c.write(columns_a[4]+"\t"+ columns_a[5]+"\t"+columns_b[12]+"\n")    
c.close()

如果文件a和b具有相同的行数n。由于嵌套循环,您现在正在生成一个包含n^2行的新文件。如果你把b行的“删除”,我想应该行

for line in a:
  line_b = b.readline().strip()
  # the rest is the same but without the second loop.
这应该起作用:

columns_a = a.readline().split()
while columns_a:
    columns_b = b.readline().split()
    c.write(columns_a[4]+"\t"+ columns_a[5]+"\t"+columns_b[12]+"\n")
这个怎么样

with open('file1.dat','r') as f:
   cols_a = [line.strip().split() for line in f]

with open('file2.dat', 'r') as f:
   cols_b = [line.strip().split() for line in f]

with open('result.dat','w') as fout:
    '''skip past first line of file'''
    for col_a, col_b in zip(cols_a[1:], cols_b[1:]):
        print col_a
        print col_b
        fout.write(col_a[4]+"\t"+ col_a[5]+"\t"+col_b[12]+"\n")
open()
a
b
创建的文件跟踪您在文件中的位置。该位置最初位于文件的顶部,每当您调用
readline()
(例如)该函数返回它所在的行,并将其位置移动到下一行的开头。在f中对行使用
进行迭代只是获得新行,直到该位置到达文件的结尾

在本例中,您正在迭代
a
中留下的行,并且在
a
的每一行上,您正在迭代
b
中留下的行——但是由于
a
的第一次迭代将
b
的位置保留在文件的末尾,因此
a
中除了第一行之外没有任何一行实际上什么都可以写

相反,您希望一次从两个文件中读取一行,例如:

for line in a:
    cols_a = line.strip().split()
    cols_b = b.readline().strip().split()
    c.write(...)

这种重复是由于程序的嵌套结构造成的,您需要并行运行循环;)您可以在两个文件中提供一些示例数据以使问题更清楚吗?请尝试
line_b=b.readline().strip()而不是
中的行
。请注意,在a
中的行的
的第一次迭代中,您已经完成了所有的
b
,因此在连续的迭代中,b
中的行的
块甚至没有运行!工作起来就像做梦一样!谢谢!