【发布时间】:2012-03-29 19:37:52
【问题描述】:
我编写了一个有效的脚本,但我猜这不是最有效的。我需要做的是:
- 比较两个包含用户信息的 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
【问题讨论】:
-
顺便说一句:既然您使用的是 2.7,为什么不使用上下文管理器打开文件呢?这样,即使出现错误,它们也会被关闭,而无需您编写
try: ... except IOError: ...python.org/dev/peps/pep-0343 -
你能给我们提供一个示例数据行吗?
-
那是因为我对 Python 还是很陌生。我选择它更多是出于工作的需要。我需要做的很多事情都很简单,只需要重复多次。我不熟悉您提到的上下文管理器,但感谢您提供链接。我会检查一下并了解更多信息。谢谢!
-
主帖子中包含的示例数据行。
-
第一个值是唯一ID吗?
标签: python algorithm optimization csv complexity-theory