Python将两个不同文件中的行合并到一个列表中

Python将两个不同文件中的行合并到一个列表中,python,list,file,merge,Python,List,File,Merge,我正在尝试从两个不同文件的行构建一个列表 File1.txt ['2.02', '-3.88', '15.25'] ['4.40', '-2.36', '14.97'] ['5.44', '0.34', '7.34'] ['5.76', '0.41', '7.60'] ['5.35', '0.19', '13.95'] File2.txt ['P1'] ['P2'] ['P3'] ['P4'] ['P5'] 理想产量 ['2.02', '-3.88', '15.25', 'P1'] ['4.

我正在尝试从两个不同文件的行构建一个列表

File1.txt

['2.02', '-3.88', '15.25']
['4.40', '-2.36', '14.97']
['5.44', '0.34', '7.34']
['5.76', '0.41', '7.60']
['5.35', '0.19', '13.95']
File2.txt

['P1']
['P2']
['P3']
['P4']
['P5']
理想产量

['2.02', '-3.88', '15.25', 'P1']
['4.40', '-2.36', '14.97', 'P2']
['5.44', '0.34', '7.34', 'P3']
['5.76', '0.41', '7.60', 'P4']
['5.35', '0.19', '13.95', 'P5']
我试着简单地添加行

combined = open('file1.txt').readlines() + open('line2.txt').readlines()
输出

["['2.02', '-3.88', '15.25']\n", "['4.40', '-2.36', '14.97']\n", "['5.44', '0.34', '7.34']\n", "['5.76', '0.41', '7.60']\n", "['5.35', '0.19', '13.95']\n", 'P1\n', 'P2\n', 'P3\n', 'P4\n', 'P5\n']
我还编写了一个函数,试图在第三个文件file3.txt中合并这两个文件

def combiner():
with open("file1.txt", 'r') as file1:
    with open('file2.txt', 'r') as file2:
        with open('file3.txt',"w") as file3:
            clines = file1.readlines()
            plines = file2.readlines()
   #Write to third file
            for i in range(len(clines)):
                line = clines[i].strip() + plines[i]
                file3.write(line)
['2.02', '-3.88', '15.25']['P1']
['4.40', '-2.36', '14.97']['P2']
['5.44', '0.34', '7.34']['P3']
['5.76', '0.41', '7.60']['P4']
['5.35', '0.19', '13.95']['P5']
但它仍然写在两个不同的列表中

cat file3.txt

def combiner():
with open("file1.txt", 'r') as file1:
    with open('file2.txt', 'r') as file2:
        with open('file3.txt',"w") as file3:
            clines = file1.readlines()
            plines = file2.readlines()
   #Write to third file
            for i in range(len(clines)):
                line = clines[i].strip() + plines[i]
                file3.write(line)
['2.02', '-3.88', '15.25']['P1']
['4.40', '-2.36', '14.97']['P2']
['5.44', '0.34', '7.34']['P3']
['5.76', '0.41', '7.60']['P4']
['5.35', '0.19', '13.95']['P5']

最好是返回这样一个列表的函数。

使用
pandas

import ast

df1 = pd.read_csv(file1, sep='\n', header=None, names=['data'])
df2 = pd.read_csv(file2, sep='\n', header=None, names=['data'])

parse = lambda d: d.transform(ast.literal_eval)

df1['data'] = parse(df1.data)
df2['data'] = parse(df2.data)
那就

df1 + df2

    data
0   [2.02, -3.88, 15.25,  P1]
1   [4.40, -2.36, 14.97,  P2]
2   [5.44, 0.34,  7.34,   P3]
3   [5.76, 0.41,  7.60,   P4]
4   [5.35, 0.19,  13.95,  P5]

使用
pandas

import ast

df1 = pd.read_csv(file1, sep='\n', header=None, names=['data'])
df2 = pd.read_csv(file2, sep='\n', header=None, names=['data'])

parse = lambda d: d.transform(ast.literal_eval)

df1['data'] = parse(df1.data)
df2['data'] = parse(df2.data)
那就

df1 + df2

    data
0   [2.02, -3.88, 15.25,  P1]
1   [4.40, -2.36, 14.97,  P2]
2   [5.44, 0.34,  7.34,   P3]
3   [5.76, 0.41,  7.60,   P4]
4   [5.35, 0.19,  13.95,  P5]

尽管文件中的行类似于列表,但实际上您将它们视为字符串。您可以使用将字符串计算为列表,将其组合,然后将其写入另一个文件

from ast import literal_eval

def combiner(infile1, infile2, outfile):
    with open(infile1) as f1, open(infile2) as f2, open(outfile, 'w+') as f3:
        f1_lists = (literal_eval(line) for line in f1)
        f2_lists = (literal_eval(line) for line in f2)
        for l1, l2 in zip(f1_lists, f2_lists):
            f3.write(str(l1+l2) + '\n')  # This could also be print(l1+l2, file=f3)

尽管文件中的行类似于列表,但实际上您将它们视为字符串。您可以使用将字符串计算为列表,将其组合,然后将其写入另一个文件

from ast import literal_eval

def combiner(infile1, infile2, outfile):
    with open(infile1) as f1, open(infile2) as f2, open(outfile, 'w+') as f3:
        f1_lists = (literal_eval(line) for line in f1)
        f2_lists = (literal_eval(line) for line in f2)
        for l1, l2 in zip(f1_lists, f2_lists):
            f3.write(str(l1+l2) + '\n')  # This could also be print(l1+l2, file=f3)

如果您也在生成进入文件的数据,那么以某种方式对数据进行序列化可能是值得的。是Python中的标准方式。如果您也在生成进入文件的数据,那么以某种方式对数据进行序列化可能是值得的。是Python的标准方法。太棒了!删除我的,因为你的更好。同样——这是正确的方法(比我的早12分钟!)我不知道。这在几行之内就解决了问题。非常感谢你!明亮的删除我的,因为你的更好。同样——这是正确的方法(比我的早12分钟!)我不知道。这在几行之内就解决了问题。多谢各位@兰戈·耶普。这个库对于处理数据非常有用(特别是当您有大量数据和文件时)。手动读取它们并在代码行上进行迭代可能非常棘手,因为代码可能会变得非常混乱并且容易出现错误:)谢谢。我忘了提到我用的是2.7。所以它不起作用。我刚刚试过使用Python3,它做到了。“干杯!”兰戈·耶普。这个库对于处理数据非常有用(特别是当您有大量数据和文件时)。手动读取它们并在代码行上进行迭代可能非常棘手,因为代码可能会变得非常混乱并且容易出现错误:)谢谢。我忘了提到我用的是2.7。所以它不起作用。我刚刚试过使用Python3,它做到了。干杯