У нас есть процесс, который принимает очень большой 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