Предупреждение: я очень новичок в Python и в программировании в целом. Я пытаюсь использовать Python 3, чтобы получить некоторые CSV-данные и внести некоторые изменения в него, прежде чем записывать их в файл. Моя проблема заключается в доступе к данным CSV из переменной, например, так:Редактирование загруженного CSV в памяти перед записью
import csv
import requests
csvfile = session.get(url)
reader = csv.reader(csvfile.content)
for row in reader:
do(something)
Это возвращает:
_csv.Error: iterator should return strings, not int (did you open the file in text mode?)
Googling показал, что я должен кормить текст читателя вместо байт, поэтому я попытался :
reader = csv.reader(csvfile.text)
Это также не работает, поскольку цикл работает через него буквой вместо строки за строкой. Я также экспериментировал с TextIOWrapper и аналогичными параметрами без успеха. Единственный способ, которым я сумел получить эту работу, написав данные в файл, чтение, а затем вносить изменения, например, так:
csvfile = session.get(url)
with open("temp.txt", 'wb') as f:
f.write(csvfile.content)
with open("temp.txt", 'rU', encoding="utf8") as data:
reader = csv.reader(data)
for row in reader:
do(something)
Я чувствую, что это далеко не самый оптимальный способ делая это, даже если он работает. Каким образом можно читать и редактировать данные CSV непосредственно из памяти, не сохраняя его во временном файле?
[Это] (https://newcircle.com/s/post/1572/python_for_beginners_reading_and_manipulating_csv_files), вероятно, стоит посмотреть, поскольку вы только начинаете. – brittenb
Какой формат - данные, которые вы извлекаете из URL-адреса (xml, json и т. Д.). – jmugz3
Это должен быть открытый текст, но, скорее всего, я что-то упускаю или что-то недопонимаю. Соответствующие заголовки ответов таковы: Content-Disposition: «attachment; filename = data.csv» Content-Encoding: «gzip» Content-Type: «text/csv; charset = UTF-8» – JSantos