Ошибки при записи CSV с помощью Python - PullRequest
3 голосов
/ 17 сентября 2011

Я сталкиваюсь с ошибками в файлах .csv, которые пишу с помощью python (необходимый формат, потому что я в команде, которая зависит от .csvs).Не по шаблону, ошибки появляются на сотнях файлов 1g.Например, дополнительные 10 столбцов только для 1 строки, дополнительная строка с ошибочными входными данными, в некоторых строках отсутствует ~ 10 столбцов.Я дважды перезапускал один и тот же скрипт, и при втором запуске ошибки отсутствуют.Мне нужен способ убедиться, что эти файлы пишутся правильно.Вот код, который я использую (я знаю, что он не самый эффективный, но я знал, как это сделать таким образом, и я хотел опубликовать его, как я это делал).

# Sample inputs, representative of the actual data I'm working with.  
output = np.zeros([40000, 1000]) # for example
iso3 = 'ALB'
sex = 'M'
year = np.ones(40000)
post_env = np.repeat(10, 40000)
post_cause = np.repeat('a', 40000)
post_pop = np.repeat(100, 40000)
outsheet = np.zeros([output.shape[0], output.shape[1]+7], dtype='|S20')
outsheet[:, 0] = iso3
outsheet[:, 1] = sex
outsheet[:, 2] = np.array(post_year, dtype='|S20')
outsheet[:, 3] = np.array(post_age, dtype='|S20')
outsheet[:, 4] = np.array(post_cause, dtype='|S20')
outsheet[:, 5] = np.array(post_env, dtype='|S20')
outsheet[:, 6] = np.array(post_pop, dtype='|S20')
outsheet[:, 7:] = np.array(output, dtype='|S20')

outsheet[outsheet=='nan'] = '.'
first_row = ['draw' + str(i) for i in range(output.shape[1])]
first_row.insert(0, 'population')
first_row.insert(0, 'envelope')
first_row.insert(0, 'cause')
first_row.insert(0, 'age')
first_row.insert(0, 'year')
first_row.insert(0, 'sex')
first_row.insert(0, 'iso3')
outfile = open('filename', 'w')
writer = csv.writer(outfile)
writer.writerow(first_row)
writer.writerows(outsheet)
outfile.close()

Ошибки даже включают в себя случайные числовые значения в первом столбце (которые должны быть «ALB»), дополнительный набор строк для наблюдения и отсутствующие столбцы наблюдения (после записи).

1 Ответ

3 голосов
/ 17 сентября 2011

Кроме того, использование xrange вместо range обычно быстрее.

Вы абсолютно уверены, что память и диск на компьютере, на котором выполняется задание, хороши?Поскольку ваши данные варьируются в сотни гигабайт, не исключено, что вы видите аппаратное повреждение.Даже если кажется, что машина работает стабильно без сбоев, при такой плотности данных довольно часты однобитовые ошибки памяти.Если какое-либо из аппаратных средств является маргинальным, такое поведение я бы ожидал.

Используются ли на ваших дисках формат проверенной суммы с проверкой?(ZFS мой любимый) Используете ли вы память ECC?Вы видите больше ошибок, когда жарко в течение дня?Видите ли вы эти ошибки на самой машине или после передачи по сети?

Сколько времени занимает выполнение вашей операции?Вы видите больше ошибок в конце?

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