我们有一个进程,需要一个非常大的csv(1.6GB)并将其分解成碎片(在本例中为3)。这是每晚运行,通常不会给我们带来任何问题。然而,当它在昨晚运行时,第一个输出文件在数据中的数字字段上丢失了精度。脚本中的活性成分是:
while lineCounter <= chunk:
oOutFile.write(oInFile.readline())
lineCounter = lineCounter + 1
,正常输出可能类似
StringField1; StringField2; StringField3; StringField4; 1000000; StringField5; 0.000054454
等
在这一次和这一个输出文件中,数字字段全部输出,最后有6个零,即
StringField1; StringField2; StringField3; StringField4; 1000000.000000; StringField5; 0.000000
我们正在使用Python v2.6(除非我们真的需要,否则不想升级)但我们不能丢失这些数据。有谁知道为什么会发生这种情况?如果readline正在进行某种隐式转换,那么有没有办法进行二进制读取,因为我们真的只是希望这些数据不受影响?
我们非常奇怪,这只影响了同一个脚本生成的输出文件之一,当重新运行时,输出就像预期的一样。
感谢
杰克
(以下线程中引用的readlines方法)
f = open(filename)
lines = 0
buf_size = 1024 * 1024
read_f = f.read # loop optimization
buf = read_f(buf_size)
while buf:
lines += buf.count('\n')
buf = read_f(buf_size)
return lines
答案 0 :(得分:1)
.readline()
对该行的内容没有任何作用,当然也没有对数字做任何事情,所以它绝对不是罪魁祸首。
感谢您提供更多信息,但这对我来说仍然看起来非常神秘,因为这两种功能都不应该导致这样的改变。你有没有在Excel中打开输出?有时Excel会做出奇怪的事情并以意想不到的方式解释内容。在这里抓住稻草......
(顺便说一句,我没有看到read_f = f.read
:)中的大优化潜力