gpt4 book ai didi

python - 比较 CSV 文件 - python 3(初学者)

转载 作者:行者123 更新时间:2023-11-30 23:23:22 27 4
gpt4 key购买 nike

我有两个 csv 文件。我在没有 csv 阅读器的情况下阅读此内容,因为行中存在不一致 - 有些行有引号,有些则没有,这使 csv 阅读器无法使用。这些文件的格式相同,但具有不同的条目,因此它们看起来像这样:

a   b   c   d    e   f   g   h   i   j   h  i   j   k
"a b c d e f g h i j h i j k j"
"a b c d e f g h i j h i j k j"

我需要做的是找到文件 1 和文件 2 中第三列 (c) 具有相同值的所有行。请注意,其余的值将完全不同,因此我认为 difflib 之类的东西不会起作用,除非我错过了一些东西。

首先我尝试使用嵌套的 for 循环 - 像这样

for line in fileOne:
entry=line.split()
print ("A")
for row in fileTwo:
space=row.split
print ("B")
if space[2]=entry[2]:
outputHandle.write(line)

但我发现使用打印语句正在输出

 A
B
B
B
A
A

我需要脚本检查第一个文件中每一行的第二个文件的所有行,因此它看起来像这样:

 A
B
B
B
A
B
B
B....etc

(我知道这非常昂贵。但遗憾的是,我只是盯着看,不知道如何更有效地做到这一点)

我还尝试使用一个函数:

def file_check(variableName):
for row in fileTwo:
return("B")
if entry in row:
return ("found")
return("not found")
for line in fileOne:
entry= line.split()
print ("A")
var=file_check(entry[2])
print (var)

输出: A ('未找到') A ('未找到') A ('未找到')

由于我使用的是测试文件,我知道存在匹配的条目,因此这也不会循环访问第二个文件,而是仅检查第一行。

很抱歉问这样一个基本问题,StackOverflowians,但这次我真的陷入困境。欢迎并赞赏任何建议!

注意:这个问题之前已经被问过,但答案仅适用于 Python 2,python 3 的 csv 模块似乎确实不同。这是这个问题的先前版本: Comparing two CSV Files Based on Specific Data in two Columns

最佳答案

我不确定您是否想要查找 B 中的多少行与文件 A 中的每一行具有相同的字段 3 值,或者匹配两个文件中共享相同字段 3 值的行字段 3...我假设是后者。

在开始之前按第三列对每个文件的行进行排序怎么样?

如果这样做,那么您可以读取文件 A,并且每次文件 A 在字段 3 中的值发生更改时,使用该新值打印 A 中的记录,然后切换到处理文件 B:

Arecord = read file A

while not EOF on file A:
currentKey = field 3 of Arecord
print "\n" + Arecord
Arecord = read file A
while field 3 of Arecord == currentKey
print Arecord

while field 3 of Brecord < currentKey:
Brecord = read file B
while field 3 of Brecord == currentKey:
print Brecord

因为您已经按字段 3 对两个文件进行了排序,所以这将快速获得结果。

如果由于某种原因您需要在末尾按顺序恢复行,请在开始之前将其原始记录号添加为附加字段,然后按该字段排序,然后删除该附加字段。

如果您添加一个额外的字段来说明每行来自哪个文件,那么您可以将文件放在一起并按两个键排序:字段 3 和“我来自哪个文件”字段,然后在中获取结果一枪。

警告:通常的 *nix“排序”命令(像大多数/所有其他 *nix“字段”相关命令一样)无法处理带引号的字段。所以你可能必须首先摆脱引用。 “sort”也不满意 Unicode,因此如果数据中有任何非 ASCII 字符,请使用“msort”或其他字符。

希望有帮助。

关于python - 比较 CSV 文件 - python 3(初学者),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24002927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com