【问题标题】:Sum two files column by column in python在python中逐列对两个文件求和
【发布时间】:2014-05-15 11:48:40
【问题描述】:

我有两个大小和列数完全相同的文件。我想将第一个文件的第 i^th 列添加到第二个文件的第 i^th 列。他们是用 python 做这件事的好方法吗?

file1
a a a a a a
a a a a a a
a a a a a a

file2
b b b b b b
b b b b b b
b b b b b b

我想要:

(a+b) (a+b) (a+b) (a+b) (a+b) (a+b)
(a+b) (a+b) (a+b) (a+b) (a+b) (a+b)
(a+b) (a+b) (a+b) (a+b) (a+b) (a+b)

编辑:以上只是我的一个更复杂的问题的简化。每个文件都有数千行,我有很多文件(约 100 个)可以执行这种操作。

【问题讨论】:

  • 请告诉我们你尝试了什么。

标签: python python-2.7 text


【解决方案1】:
with open("file1") as f1:
    with open("file2") as f2:
        for line1, line2 in zip(f1, f2):
            items1 = line1.split()
            items2 = line2.split()
            sums = ["({}+{})".format(i1, i2) for i1, i2 in zip(items1, items2)]
            print(" ".join(sums))

【讨论】:

    【解决方案2】:

    pandas DataFrame 可以是此类操作的不错选择。它允许对整个数据帧(矩阵)进行操作,例如df_one.add(df_two)

    1 陡峭的从文件中读取数据到数据帧中:http://pandas.pydata.org/pandas-docs/version/0.13.1/generated/pandas.DataFrame.from_csv.html(例如:http://www.econpy.org/tutorials/general/csv-pandas-dataframe)

    2 添加两个数据框,如此 SO answear 所示:Adding two pandas dataframes

    【讨论】:

    • 如果需要安装pip install pandas
    【解决方案3】:

    我认为这会对你有所帮助

    with open("file1") as a, open("file2") as b:
        x = [[int(i) for i in u.split()] for u in a.readlines()]
        y = [[int(i) for i in v.split()] for v in b.readlines()]
        n = len(x)
        m = len(x[0])
        ans = ""
        for i in xrange(n):
            for j in xrange(m):
                ans += str(x[i][j]+y[i][j]) + " "
            print ans[:-1]
            ans = ""
    

    【讨论】:

      【解决方案4】:

      你可以使用numpy.loadtxt():

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

      它将接受您想要的元素级字符串连接,甚至更多:

      print('('+a+'+'+b+')')
      #array([['(a+b)', '(a+b)', '(a+b)', '(a+b)'],
      #       ['(a+b)', '(a+b)', '(a+b)', '(a+b)'],
      #       ['(a+b)', '(a+b)', '(a+b)', '(a+b)']], dtype=object)
      
      print(a+b)
      #array([['ab', 'ab', 'ab', 'ab'],
      #       ['ab', 'ab', 'ab', 'ab'],
      #       ['ab', 'ab', 'ab', 'ab']], dtype=object)
      
       print(3*a)
      #array([['aaa', 'aaa', 'aaa', 'aaa'],
      #       ['aaa', 'aaa', 'aaa', 'aaa'],
      #       ['aaa', 'aaa', 'aaa', 'aaa']], dtype=object)
      

      【讨论】:

        猜你喜欢
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 2014-12-05
        • 2020-12-31
        • 2018-09-09
        • 1970-01-01
        • 1970-01-01
        • 2021-04-27
        相关资源
        最近更新 更多