Python ReadLine()中随机精度损失

时间:2010-06-09 13:45:36

标签: python file-io

我们有一个进程,需要一个非常大的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 

1 个答案:

答案 0 :(得分:1)

.readline()对该行的内容没有任何作用,当然也没有对数字做任何事情,所以它绝对不是罪魁祸首。

感谢您提供更多信息,但这对我来说仍然看起来非常神秘,因为这两种功能都不应该导致这样的改变。你有没有在Excel中打开输出?有时Excel会做出奇怪的事情并以意想不到的方式解释内容。在这里抓住稻草......

(顺便说一句,我没有看到read_f = f.read :)中的大优化潜力