Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将两个文件中的列相加和相乘?_Python_Python 3.x - Fatal编程技术网

Python 如何将两个文件中的列相加和相乘?

Python 如何将两个文件中的列相加和相乘?,python,python-3.x,Python,Python 3.x,我有两个输入文件(input1.txt和input2.txt)。我会将第一个输入文件(input1.txt)的第一列乘以第二个输入文件(input2.txt)的第三列,将两个输入文件的第二列相加,并将结果写入输出文件 我尝试了下面的代码,但它给出了错误。如何修复我的代码 错误: #!/usr/bin/env python3 with open('output.txt', mode='w') as f: with open("1.txt") as f1: data1 =

我有两个输入文件(
input1.txt
input2.txt
)。我会将第一个输入文件(
input1.txt
)的第一列乘以第二个输入文件(
input2.txt
)的第三列,将两个输入文件的第二列相加,并将结果写入输出文件

我尝试了下面的代码,但它给出了错误。如何修复我的代码

错误:

#!/usr/bin/env python3

with open('output.txt', mode='w') as f:
    with open("1.txt") as f1:
        data1 = f1.readlines()
        for line1 in data1:
            lines1 = line1.strip('')
            with open("2.txt") as f2:
                data2 = f2.readlines()
                for line2 in data2:
                    lines2 = line2.strip('')
                    f.write ("%.3f %.3f\n" % (float(lines1[0]*float(lines2[2]),
                                              float(lines1[1]+float(line1[1])))
SyntaxError:解析时出现意外的EOF
input1.txt:

#!/usr/bin/env python3

with open('output.txt', mode='w') as f:
    with open("1.txt") as f1:
        data1 = f1.readlines()
        for line1 in data1:
            lines1 = line1.strip('')
            with open("2.txt") as f2:
                data2 = f2.readlines()
                for line2 in data2:
                    lines2 = line2.strip('')
                    f.write ("%.3f %.3f\n" % (float(lines1[0]*float(lines2[2]),
                                              float(lines1[1]+float(line1[1])))
2.51.2
5.5 6.5
3.2 6.3
input2.txt:

#!/usr/bin/env python3

with open('output.txt', mode='w') as f:
    with open("1.txt") as f1:
        data1 = f1.readlines()
        for line1 in data1:
            lines1 = line1.strip('')
            with open("2.txt") as f2:
                data2 = f2.readlines()
                for line2 in data2:
                    lines2 = line2.strip('')
                    f.write ("%.3f %.3f\n" % (float(lines1[0]*float(lines2[2]),
                                              float(lines1[1]+float(line1[1])))
10.512.520.2
13.1 14.5 30.1
15.9 16.7 40.2
所需输出.txt:

#!/usr/bin/env python3

with open('output.txt', mode='w') as f:
    with open("1.txt") as f1:
        data1 = f1.readlines()
        for line1 in data1:
            lines1 = line1.strip('')
            with open("2.txt") as f2:
                data2 = f2.readlines()
                for line2 in data2:
                    lines2 = line2.strip('')
                    f.write ("%.3f %.3f\n" % (float(lines1[0]*float(lines2[2]),
                                              float(lines1[1]+float(line1[1])))
#第一个数据第二个数据
50.20   13.7
165.55  21.0
128.64  23.0
代码:

#!/usr/bin/env python3

with open('output.txt', mode='w') as f:
    with open("1.txt") as f1:
        data1 = f1.readlines()
        for line1 in data1:
            lines1 = line1.strip('')
            with open("2.txt") as f2:
                data2 = f2.readlines()
                for line2 in data2:
                    lines2 = line2.strip('')
                    f.write ("%.3f %.3f\n" % (float(lines1[0]*float(lines2[2]),
                                              float(lines1[1]+float(line1[1])))

将代码粘贴到编辑器中后,我可以看到在
f.write()
调用的末尾缺少一些右括号,这导致了
SyntaxError:expected EOF解析时出现
错误。添加那些缺少的
,错误就会消失。您还忘记了将线拆分为单独的元素。在执行
float
转换时,这将导致
ValueError

您的代码没有错误:

with open('output.txt', mode='w') as f:
    with open("1.txt") as f1:
        data1 = f1.readlines()
        for line1 in data1:
            lines1 = line1.strip('').split()
            with open("2.txt") as f2:
                data2 = f2.readlines()
                for line2 in data2:
                    lines2 = line2.strip('').split()
                    f.write ("%.3f %.3f\n" % (float(lines1[0])*float(lines2[2]),
                                              float(lines1[1])+float(lines1[1])))
然而,逻辑需要调整。上面的代码迭代第一个输入文件中的每一行,然后在其中迭代第二个文件中的每一行。这将给你一个笛卡尔线积,我不相信这是你想要的

我们可以从它创建的不正确输出中看出这一点:

50.500 2.400
75.250 2.400
100.500 2.400
111.100 13.000
165.550 13.000
221.100 13.000
64.640 12.600
96.320 12.600
128.640 12.600
相反,您可以并行迭代这两个文件。您可以使用将两个输入文件聚合在一起,以在各自的列之间进行计算:

# Open both input files and output file
with open("input1.txt") as input1, open("input2.txt") as input2, open("output.txt", mode="w") as out:

    # Zip both inputs so we can do column matching
    for line1, line2 in zip(input1, input2):

        # Split lines into lists representing columns
        col1, col2 = line1.split(), line2.split()

        # Do both calculations
        # Round the first one to 2 decimal places and second one to 1 decimal place
        first_calc = round(float(col1[0]) * float(col2[2]), 2)
        second_calc = round(float(col1[1]) + float(col2[1]), 1)

        # Write to file
        out.write(f"{first_calc} {second_calc}\n")
这将提供以下output.txt:


我将保留最终格式供您执行:-)

请提供完整的错误消息。你做过调试和研究吗?这能回答你的问题吗?是的,最后一笔没有足够的结束括号。