【问题标题】:Concatenating two text files in Python在 Python 中连接两个文本文件
【发布时间】:2023-03-03 07:38:18
【问题描述】:

我是 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 中的数学工具以来,我还希望将我的知识扩展到该语言提供的其他机会。

提前致谢

【问题讨论】:

    标签: python file concatenation


    【解决方案1】:

    如果你想用老式的方式连接它们,并将它们放在一个新文件中,你可以这样做:

    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
    • 好的,现在我从您的其他评论中知道了原因。谢谢。
    • 我试过这个但得到一个错误消息文件“”,第 3 行 for f in [a, b, c]: ^ SyntaxError: invalid syntax
    • 第 3 行?好像你在这里做错了什么。我已经在我的系统上尝试过,它确实有效。
    • 这可能取决于系统。稍后我会更准确地看到。
    【解决方案2】:

    当然,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】:

      试试这个,将文件读取为 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 (最近一次调用最后): File " ",第 1 行,在 文件中 "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py",第 1073 行,在 savetxt fh.write(asbytes(format % tuple(row) + 换行))类型错误:需要浮点参数,而不是 numpy.string_
      • 这个连接产生一个字符串数组 (U32)。 savetxt 然后需要一个与fmt 兼容的字符串,例如%s.
      • 可以创建一个包含混合浮点和字符串(或布尔)字段的数组,但这更复杂,使用savetxt 编写它需要更高级的fmt
      • 好的,谢谢。现在可以了。我还有一个问题。但现在已经解决了。事实上,串联后的结果数组中的数字只包含一位数字。
      猜你喜欢
      • 2022-11-17
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2022-01-27
      • 2018-10-10
      • 2021-04-17
      相关资源
      最近更新 更多