在Python

时间:2017-06-10 10:29:24

标签: python file concatenation

我是非常初学的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 

.......

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

有人可以帮我写python所需的行吗?

我很容易在fortran中做到这一点但是听说python中的脚本会小得多。 自从我开始用Python学习数学工具以来,我也希望将我的知识扩展到这种语言提供的其他机会。

提前致谢

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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()

答案 2 :(得分: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')