gpt4 book ai didi

python - 优化python文件比较脚本

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:34 26 4
gpt4 key购买 nike

我已经编写了一个有效的脚本,但我猜这不是最有效的。我需要做的是:

  • 比较两个包含用户信息的 csv 文件。它本质上是一个成员列表,其中一个文件是另一个文件的更新版本。
  • 文件包含ID、姓名、状态等数据
  • 仅将新文件中旧文件中不存在或包含更新信息的记录写入第三个 csv 文件。对于每条记录,都有一个唯一的 ID,可让我确定该记录是新的还是以前存在的。

这是我到目前为止编写的代码:

import csv

fileAin = open('old.csv','rb')
fOld = csv.reader(fileAin)

fileBin = open('new.csv','rb')
fNew = csv.reader(fileBin)

fileCout = open('NewAndUpdated.csv','wb')
fNewUpdate = csv.writer(fileCout)

old = []
new = []

for row in fOld:
old.append(row)
for row in fNew:
new.append(row)

output = []

x = len(new)
i = 0
num = 0

while i < x:
if new[num] not in old:
fNewUpdate.writerow(new[num])

num += 1
i += 1

fileAin.close()
fileBin.close()
fileCout.close()

就功能而言,此脚本有效。但是,我试图在包含数十万条记录的文件上运行它,并且需要数小时才能完成。我猜问题在于将两个文件读取到列表并将整行数据视为单个字符串以进行比较。

我的问题是,对于我正在尝试做的事情,是否有一种更快、更有效的方法来处理这两个文件以创建仅包含新记录和更新记录的第三个文件?我真的没有目标时间,主要是想了解 Python 中是否有更好的方法来处理这些文件。

在此先感谢您的帮助。

更新以包含示例数据行:

123456789,34,DOE,JOHN,1764756,1234 MAIN ST.,CITY,STATE,305,1,A

最佳答案

这样的事情怎么样?您的代码最大的低效之处之一是每次都检查 new[num] 是否在 old 中,因为 old 是一个列表,所以您必须遍历整个列表。使用字典要快得多。

import csv

fileAin = open('old.csv','rb')
fOld = csv.reader(fileAin)

fileBin = open('new.csv','rb')
fNew = csv.reader(fileBin)

fileCout = open('NewAndUpdated.csv','wb')
fNewUpdate = csv.writer(fileCout)

old = {row[0]:row[1:] for row in fOld}
new = {row[0]:row[1:] for row in fNew}
fileAin.close()
fileBin.close()

output = {}

for row_id in new:
if row_id not in old or not old[row_id] == new[row_id]:
output[row_id] = new[row_id]

for row_id in output:
fNewUpdate.writerow([row_id] + output[row_id])


fileCout.close()

关于python - 优化python文件比较脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9932278/

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