#python #arrays #csv
#python #массивы #csv
Вопрос:
Итак, я хочу сохранить свои результаты в файл CSV, но я продолжаю получать эту ошибку
‘_csv.Ошибка: ожидаемая итерация, а не int’
Это мой код
import csv
word_freqs = {}
words = []
for data in items:
with open('filepath.csv', 'w') as f:
writer = csv.writer(f)
word_freqs[data] = {}
total = len(item_tokens[data])
token_lengths = [len(token) for token in item_tokens[data]]
words.append(token_lengths)
print(token_lengths)
writer.writerows(token_lengths)
Однако, если я изменю
writer.writerows(token_lengths)
Для
writer.writerow(token_lengths)
Он печатает выходные данные правильно
[6, 5, 7, 1, 3,5 ,7, 10, 3, 7, 6, 2, 9, 5, 2, 1, 7, 7, 11, 5, 6, 6]
[12, 2, 7, 13, 12, 9, 2, 2, 9, 2, 10, 10]
[6, 8, 12, 3, 11, 3, 3, 6, 7, 5, 4, 4, 3, 7, 7]
[5, 2, 4, 2, 4, 7, 1, 2, 9, 5, 2, 5, 4, 7, 2, 6]
Однако, когда дело доходит до сохранения результатов в файле CSV, это сохранит только последнюю строку массива в формате CSV
[5, 2, 4, 2, 4, 7, 1, 2, 9, 5, 2, 5, 4, 7, 2, 6]
Комментарии:
1. Попробуйте сначала открыть файл, затем выполните итерацию
data
и сохранитеwriterow
.
Ответ №1:
Вы инициализируете средство записи csv каждый раз для каждой итерации элемента. Таким образом, по завершении процесса вы получите только последнюю строку. Инициализируйте его только один раз. Ваш цикл for должен появиться позже. И, как упоминалось в другом ответе, используйте writerow
import csv
word_freqs = {}
words = []
with open('filepath.csv', 'w') as f:
writer = csv.writer(f)
for data in items:
word_freqs[data] = {}
total = len(item_tokens[data])
token_lengths = [len(token) for token in item_tokens[data]]
words.append(token_lengths)
print(token_lengths)
writer.writerow(token_lengths)
Комментарии:
1. Спасибо, однако он печатает правильно, но результаты в CSV неверны
2. вы
token_lengths
правы? Я предлагаю выполнить отладку, чтобы проверить, откуда берется несоответствие. Это может быть за пределами опубликованного вами фрагмента кода.3. Да, я понял, что Excel загружает не весь набор данных, поскольку он слишком большой. Вот почему мой вывод не соответствовал файлу
Ответ №2:
Поскольку вы в любом случае создаете список всех token_lengths
в words
, вы также можете сделать
import pandas as pd
pd.DataFrame(words).to_csv("filepath.csv",index=False)
Преимущество: to_csv позволяет выполнять множество настроек в csv, например, как обрабатывать строки разной длины (na_rep) и т.д.
Комментарии:
1. Я знаю, что
pandas
это популярно и все такое, но я не думаю, чтоpandas
следует рассматривать как стандартную библиотеку. Если вопрос использует стандартную библиотеку, ответ должен следовать за этим.