在Python中连接两个文本文件

3
我是一名刚入门的Python学习者。所以我的问题可能相当幼稚。 我开始学习这种语言主要是因为像Numpy和Matplotlib这样的数学工具似乎非常有用。
实际上,除了数学领域,我不知道Python在其他领域如何发挥作用。 我想知道是否可能(如果是,如何)使用Python处理文本文件等问题。
更准确地说,是否可能解决以下问题:
我有两个文件A.txt和B.txt。 A.txt文件包含三列数字,看起来像这样。
 0.22222000  0.11111000  0.00000000   
 0.22222000  0.44444000  0.00000000   
 0.22222000  0.77778000  0.00000000   
 0.55556000  0.11111000  0.00000000   
 0.55556000  0.44444000  0.00000000   
.....

B.txt文件包含三列字母F或T,格式如下:
  F   F   F   
  F   F   F   
  F   F   F   
  F   F   F   
  T   T   F   
......

文件A.txt和B.txt中的行数相同。
我需要创建一个文件,它应该长这样:
   0.22222000  0.11111000  0.00000000   F   F   F   
   0.22222000  0.44444000  0.00000000   F   F   F   
   0.22222000  0.77778000  0.00000000   F   F   F   
   0.55556000  0.11111000  0.00000000   F   F   F  
   0.55556000  0.44444000  0.00000000   T   T   F 

换句话说,我需要创建一个文件,其中包含A.txt文件的3列和B.txt文件的3列。

有人能帮我编写所需的Python代码吗?

我可以很容易地用Fortran做到这一点,但听说Python脚本要小得多。并且由于我开始学习Python中的数学工具,我也希望扩展我的知识以利用这种语言提供的其他机会。

先谢谢了。

3个回答

4
当然,Python可以用于文本处理(可能比数值工作更适合)。然而,所提出的任务可以使用单个Unix命令完成:paste A.txt B.txt > output.txt 以下是一种不使用numpy的Python解决方案:
 with open('A.txt') as a:
     with open('B.txt') as b:
         with open('output.txt', 'w') as c:
             for line_a, line_b in zip(a, b):
                 c.write(line_a.rstrip() + ' ' + line_b)

3
如果您想以传统方式将它们连接起来并放入新文件中,可以这样做:
a = open('A.txt')
b = open('B.txt')
c = open('C.txt', 'w')
for a_line, b_line in zip(a, b):
    c.write(a_line.rstrip() + ' ' + b_line)

a.close()
b.close()
c.close()

去除字符串 a_line 的末尾空格可能是必要的。 - Błotosmętek
好的,现在我从你的另一个评论中明白了。谢谢。 - cs95
这可能取决于系统。我稍后会更精确地查看。 - FizikMiwa
在此之后,出现了以下消息:对于 f 在 [a, b, c] 中。 - FizikMiwa
你应该考虑标记对你最有帮助的答案。除了我的基本解决方案之外,这里还有另外两个出色的答案,所以请接受对你最有帮助的解决方案。 :) - cs95
显示剩余5条评论

0

尝试这个,将文件读取为numpy数组

 a = np.loadtxt('a.txt')
b = np.genfromtxt('b.txt',dtype='str')

如果是b,由于字符串内容需要使用genfromtext。

np.concatenate((a, b), axis=1)

最后,你将得到

np.concatenate((a, b), axis=1)
array([['0.22222', '0.11111', '0.0', 'F', 'F', 'F'],
       ['0.22222', '0.44444', '0.0', 'F', 'F', 'F'],
       ['0.22222', '0.77778', '0.0', 'F', 'F', 'F'],
       ['0.55556', '0.11111', '0.0', 'F', 'F', 'F'],
       ['0.55556', '0.44444', '0.0', 'T', 'T', 'F']], 
      dtype='<U32')

我该如何将获取的数组写入文件?我尝试了以下代码:c=np.concatenate((a, b), axis=1)np.savetxt('test.txt', c)但是我收到了以下错误信息:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1073, in savetxt fh.write(asbytes(format % tuple(row) + newline)) TypeError: float argument required, not numpy.string_ - FizikMiwa
这个连接操作会生成一个字符串数组(U32)。然后savetxt需要一个兼容的字符串格式,例如%s - hpaulj
可以创建一个包含混合浮点数和字符串(或布尔值)字段的数组,但这更加复杂,并且使用savetxt编写它需要更高级的fmt - hpaulj
好的,谢谢。现在它可以工作了。我还有一个问题。但是现在已经解决了。实际上,在连接后,结果数组中的数字只包含一位数。 - FizikMiwa
a = np.loadtxt('A.txt'); b = np.genfromtxt('B.txt',dtype='str'); aa=a.astype('|S15'); c=np.concatenate((aa, b), axis=1); np.savetxt('output.txt',c,fmt="%s") - FizikMiwa
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接