Случайная потеря точности в Python ReadLine () - PullRequest
0 голосов
/ 09 июня 2010

У нас есть процесс, который принимает очень большой CSV-файл (1,6 ГБ) и разбивает его на части (в данном случае 3).Это работает ночью и обычно не доставляет нам никаких проблем.Однако, когда он работал прошлой ночью, первый из выходных файлов потерял точность в числовых полях данных.Активным ингредиентом в сценарии являются строки:

while lineCounter <= chunk:
    oOutFile.write(oInFile.readline())
    lineCounter = lineCounter + 1

, и нормальный вывод может быть примерно таким:

StringField1; StringField2; StringField3; StringField4; 1000000; StringField5; 0.000054454

и т. Д.

В этом случаев этом одном выходном файле все числовые поля были выведены с шестью нулями в конце, т.е.

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 Ответ

1 голос
/ 09 июня 2010

.readline() ничего не делает с содержанием строки, конечно же, не с числами, так что это определенно не виновник.

Спасибо за предоставление дополнительной информации, но это все еще выглядит очень загадочно для меня, поскольку ни одна из функций не должна вызывать такое изменение. Вы случайно не открыли вывод в Excel? Иногда Excel делает странные вещи и интерпретирует вещи неожиданным образом. Хватает за соломинку здесь ...

(Кроме того, я не вижу большого потенциала оптимизации в read_f = f.read:))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...