Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 3.x 参照根据python中其他文件的公共信息过滤的文件创建文件_Python 3.x - Fatal编程技术网

Python 3.x 参照根据python中其他文件的公共信息过滤的文件创建文件

Python 3.x 参照根据python中其他文件的公共信息过滤的文件创建文件,python-3.x,Python 3.x,我有两个文本文件。file1有6列和2行,但file2有2列和5行,如以下示例所示: 文件1: Code S1 S2 S3 S4 S5 X2019060656_12 4.068522 1889.299282 1547.771971 434.392935 4346.019078 X2019060657_05 1.318325 1290.142988 28

我有两个文本文件。file1有6列和2行,但file2有2列和5行,如以下示例所示:

文件1:

Code        S1      S2      S3      S4      S5     
X2019060656_12      4.068522        1889.299282     1547.771971     434.392935      4346.019078
X2019060657_05      1.318325        1290.142988     285.579601      73.329331       2222.198520
文件2:

Class       group
X2019060656_12      A
X2019060657_05      A
X2019060658_04      A
X2019060659_03      A
X2019060660_08      A
我想根据file2的列类和file1中的列代码的交集对file2的子集进行过滤

这是预期输出:

Class       group
X2019060656_12      A
X2019060657_05      A
为此,我用python编写了以下代码:

file1 = open("file1.txt", "r")
file2 = open("file2.txt", "r")

file1 = {}
keys1 = []
values1 = []
with open("file1.txt") as file1:
    for line in file1.lines():
        keys1.append(line[0])
        values1.append(line[1])
        dict_file1 = dict(zip(keys1, values1))


file2 = {}
keys2 = []
values2 = []
with open("file2.txt") as file2:
    for line in file2.lines():
        keys2.append(line[0])
        values2.append(line[1])
        dict_file2 = dict(zip(keys2, values2))
        newlist = [] 
        for item in dict_file1:
            for item2 in dict_file2:
                if item1 == item2:
                    new_list.append(line)

with open('new_file.txt', 'w') as f:
    for i in new_list:
        f.write("%s\n" % i)
但是输出文件与预期的输出不同。你知道如何修复它吗?

你可以用熊猫这样做:

import pandas as pd
df1 = pd.read_csv("file1.txt",delim_whitespace=True)
df2 = pd.read_csv("file2.txt",delim_whitespace=True)
df2[df2['Class'].isin(df1['Code'])]
输出:

    Class   group
0   X2019060656_12  A
1   X2019060657_05  A

如果要导出到文件,请使用df2.to_csv

我不是python方面的专家,但我想知道为什么变量file1和file2会在下面几行中被重新定义为file1={}和file2={}。