搜索一个文件的行中的其他文件和蟒蛇

问题描述:

打印相应的行我有这样一个CSV文件:(无头)搜索一个文件的行中的其他文件和蟒蛇

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文件:(无头)

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) 

如果可能的话,你能告诉我如何做到这一点,好吗?我的代码有什么问题?提前致谢 !

+1

你有'熊猫'吗? –

这是一个解决方案,但你也可以看看具体的CSV工具和熊猫的建议:

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

+0

完美的方法和解释!谢谢@atru! –

+0

不客气,添加了一些更多的解释,以防万一:) – atru

  • 尝试使用pandas,它是一种非常有效的方法,可以将csv文件读取到名为dataframe的数据结构中。

编辑

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的拆分中获取第一个项目。

+0

我改变了它,但仍然不起作用。 –

+0

哦,我的坏,我误解为拆分。我认为你应该改变它分裂。阅读我的编辑 – Samantha