在另一个文件中搜索一个文件的行并在 python 中打印适当的行

Searching rows of a file in another file and printing appropriate rows in python

我有一个这样的 csv 文件:(没有 headers)

aaa,1,2,3,4,5  
bbb,2,3,4,5,6
ccc,3,5,7,8,5
ddd,4,6,5,8,9

我想搜索另一个 csv 文件:(没有 headers)

bbb,1,2,3,4,5,,6,4,7
kkk,2,3,4,5,6,5,4,5,6
ccc,3,4,5,6,8,9,6,9,6
aaa,1,2,3,4,6,6,4,6,4
sss,1,2,3,4,5,3,5,3,5

并打印存在于第一个文件中的第二个文件中的行(基于第一列的匹配)。所以结果将是:

bbb,1,2,3,4,5,,6,4,7
ccc,3,4,5,6,8,9,6,9,6
aaa,1,2,3,4,6,6,4,6,4 

我有以下代码,但它没有打印任何东西:

labels = []
with open("csv1.csv", "r") as f:

    f.readline()
    for line in f:
        labels.append((line.strip("\n")))

with open("csv2.csv", "r") as f:

    f.readline()
    for line in f:
        if (line.split(",")[1]) in labels:
            print (line)

如果可能的话,你能告诉我怎么做吗?我的代码有什么问题?提前致谢!

  • 尝试使用 pandas,这是一种将 csv 文件读入称为数据帧的数据结构的非常有效的方法。

编辑

labels = []
with open("csv1.csv", "r") as f:

    f.readline()
    for line in f:
        labels.append((line.split(',')[0])

with open("csv2.csv", "r") as f:

    f.readline()
    for line in f:
        if (line.split(",")[0]) in labels:
            print (line)

我这样标签只包含字符串的第一部分所以 ['aaa','bbb', etc]

然后你想检查line.split(",")[0]是否在标签

由于您只想根据第一列进行匹配,因此您应该使用拆分,然后从索引 0 处的拆分中获取第一项。

这是一个解决方案,尽管您也可以按照建议查看特定于 csv 的工具和 pandas:

labels = []
with open("csv1.csv", "r") as f:
    lines = f.readlines()
    for line in lines:
        labels.append(line.split(',')[0])

with open("csv2.csv", "r") as f:
    lines = f.readlines()

with open("csv_out.csv", "w") as out:
    for line in lines:
        temp = line.split(',')
        if any(temp[0].startswith(x) for x in labels):
            out.write((',').join(temp))

该程序首先只收集来自 csv1.csv 的标签 - 请注意,您使用了 readline,程序似乎希望一次读取文件中的所有行。一种方法是使用 readlines。该程序还必须从 readlines 收集行 - 此处它将它们存储在名为 lines 的列表中。为了收集标签,程序循环遍历每一行,用 , 拆分并将第一个元素附加到带有标签 labels.

的数组中

在第二部分中,程序从 csv2.csv 读取所有行,同时打开文件写入输出 csv.out。它逐行处理来自 csv2.csv 的行,同时将目标文件写入输出文件。

为此,程序再次按 , 拆分每一行,并查看是否在 labels 数组中找到来自 csv2 的标签。如果是,该行将写入 csv_out.csv.