Python 为什么我的节目要花这么长时间?
我正在处理一个大的txt文件,总共有8050000行。这些行的一个简短示例是:Python 为什么我的节目要花这么长时间?,python,Python,我正在处理一个大的txt文件,总共有8050000行。这些行的一个简短示例是: usedfor zipper fasten_coat usedfor zipper fasten_jacket usedfor zipper fasten_pant usedfor your_foot walk atlocation camera cupboard atlocation camera drawer atlocation camera house relatedto more plenty 我编写了一
usedfor zipper fasten_coat
usedfor zipper fasten_jacket
usedfor zipper fasten_pant
usedfor your_foot walk
atlocation camera cupboard
atlocation camera drawer
atlocation camera house
relatedto more plenty
我编写了一个python代码来读取这些行,并将它们存储为字典。我的代码是:
dicCSK = {}
for line in finCSK:
line=line.strip('\n')
try:
r, c1, c2 = line.split(" ")
except ValueError: print line
if c1 not in dicCSK.keys():
dicCSK[c1]= []
str1 = r+" "+c2
dicCSK[c1].append(str1)
然而,我运行了20多个小时的程序,它仍然在运行。那么,有没有更好的方法将它们存储在字典中呢?我的代码太慢了。谢谢。这是一个错误:它生成字典中所有键的列表,然后扫描它
if c1 not in dicCSK.keys():
dicCSK[c1]= []
相反:
if c1 not in dicCSK:
dicCSK[c1] = []
或者,使用defaultdict
来避免检查
dicCSK = collections.defaultdict(list)
for line in finCSK:
line=line.strip('\n')
try:
r, c1, c2 = line.split(" ")
except ValueError:
print line
dicCSK[c1].append(r+" "+c2)
此外,您可能还希望在
try/except
的else
子句下附加(r+“”+c2)语句,否则即使出现ValueError
异常,它也会执行。这是一个错误:它生成字典中所有键的列表,然后扫描它
if c1 not in dicCSK.keys():
dicCSK[c1]= []
相反:
if c1 not in dicCSK:
dicCSK[c1] = []
或者,使用defaultdict
来避免检查
dicCSK = collections.defaultdict(list)
for line in finCSK:
line=line.strip('\n')
try:
r, c1, c2 = line.split(" ")
except ValueError:
print line
dicCSK[c1].append(r+" "+c2)
此外,您可能还需要
dicCSK[c1]。在try/except
的else
子句下追加(r+“”+c2)
语句,否则即使出现ValueError
异常,它也会执行。我投票将此问题作为非主题来结束,因为这是在要求代码复查,因此它属于旁白:我可能会为这项特殊的工作选择一种不同的工具(和存储格式)——具体取决于对生成的词典所做的操作。旁白[2]:collections.defaultdict(list)
可以避免dicCSK.keys()中的c1检查。@jarrodrobson是这样吗?我不会考虑任何“20小时”的工作,除非它真的能处理大量的数据(8M是很多,但不是20小时)。我不同意这是要求代码审查:代码有一个特定的问题——它太慢了。我投票把这个问题关闭,因为这是一个要求代码审查,因此它属于旁白:我可能会为这项特殊的工作选择一种不同的工具(和存储格式)——具体取决于对生成的词典所做的操作。旁白[2]:collections.defaultdict(list)
可以避免dicCSK.keys()中的c1检查。@jarrodrobson是这样吗?我不会考虑任何“20小时”的工作,除非它真的能处理大量的数据(8M是很多,但不是20小时)。我不同意这是要求代码审查:代码有一个特定的问题——它太慢了。谢谢你的回答,它现在更快了。但是,我的程序因错误而终止:MemoryError
。因为我有四个大文件。它发生在程序开始处理第二个文件时。我的计算机有8GBmemory@flyingmouse好的,但这听起来像是另一个问题。如果这个答案令人满意地回答了你提出的问题,也许可以接受它,然后用新问题开始一个新问题(假设它足够清晰和具体)。感谢你的回答,新问题是:谢谢你的回答,现在更快了。但是,我的程序因错误而终止:MemoryError
。因为我有四个大文件。它发生在程序开始处理第二个文件时。我的计算机有8GBmemory@flyingmouse好的,但这听起来像是另一个问题。如果此答案令人满意地回答了您提出的问题,或许可以接受此答案,并用新问题开始新问题(假设它足够清晰和具体)。感谢您的回答,新问题是: