我要处理大约16000行数据。每一行都是一个事务记录,有几个部分。例如: 行=[ID,thing,widget]
我想做的是有点简单-对于每一行,将它与其他行逐个比较。如果A行有一个惟一的ID和惟一的小部件,我想把它写到outfile中。否则,我就不需要了。(这个程序基本上为我自动清理数据。)以下是我目前所掌握的:
try:
infile=open(file1, 'r')
for line in infile:
line_wk=line.split(",")
outfile=open(file2, 'r')
for line in outfile:
line_wk2=line.split(",")
if line_wk[0]==line_wk2[0]:
if line_wk[2]!=line_wk2[2]: #ID is not unique, but the widget is
to_write=','.join(line_wk) #queued to write later
else:
to_write=','.join(line_wk) #queued to write later
if len(to_write)>0:
outfile.close()
outfile=open(file2, 'a')
outfile.write(to_write)
outfile.close()
outfile=open(file2, 'r')
infile.close()
outfile.close()
except:
print("Something went wrong.")
在一个小的测试集上运行它,它会保持在“try”块中,但其他情况下只会写入所有内容,而不仅仅是具有唯一ID和小部件的那些。我想有一个非常简单的方法来做这个。感谢任何帮助!在
您要做的是创建一个字典,其中键是
(ID, widget)
的元组,值是thing
。字典密钥保证是唯一的。所以,你的代码应该是这样的。在如果保留它们的原始顺序很重要,那么可以使用collections包中的
OrderedDict
您还可以清理
outfile.write
行的编写方式,但它应该按原样工作。在最后,由于您似乎正在读/写csv(逗号分隔值)格式,所以可以使用csv module。在
为了测试这个,我写了一个脚本
^{pr2}$它的运行结果似乎是正确的。在
相关问题 更多 >
编程相关推荐