搜索一个文件的行中的其他文件和蟒蛇
打印相应的行我有这样一个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)
如果可能的话,你能告诉我如何做到这一点,好吗?我的代码有什么问题?提前致谢 !
这是一个解决方案,但你也可以看看具体的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
。
完美的方法和解释!谢谢@atru! –
不客气,添加了一些更多的解释,以防万一:) – 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的拆分中获取第一个项目。
我改变了它,但仍然不起作用。 –
哦,我的坏,我误解为拆分。我认为你应该改变它分裂。阅读我的编辑 – Samantha
你有'熊猫'吗? –