Я использую модуль Django django-chunked-upload для получения потенциально больших файлов CSV.Я могу предположить, что CSV правильно отформатированы, но я не могу предположить, что такое разделитель.
После завершения загрузки возвращается объект UploadedFile .Мне нужно проверить, что правильные столбцы включены в загруженный CSV и что типы данных в каждом столбце правильные.
загрузка файла с csv.reader()
не работает:
reader = csv.reader(uploaded_file)
next(reader)
>>> _csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
Это может быть связано с тем, что uploaded_file.content_type
и uploaded_file.charset
оба выглядят как None
.
Я нашел довольно не элегантное решение, чтобы захватить заголовок и выполнить итерации по строкам:
i = 0
header = ""
for line in uploaded_file:
if i == 0:
header = line.decode('utf-8')
header_list = list(csv.reader(StringIO(header)))
print(header_list[0])
#validate column names
else:
tiny_csv = StringIO(header + line.decode('utf-8'))
reader = csv.DictReader(tiny_csv)
print(next(reader))
#validate column types
Я также пытался загрузить путь к сохраненному файлу:
path = #figure out the path of the temp file
f = open(path,"r")
reader = csv.reader(f)
Но мне не удалось получить путь к временному файлу из объекта UploadedFile.
В идеале я хотел бы создать обычного читателя или DictReader из объекта UploadedFile, но, похоже, он ускользает от меня.У кого-нибудь есть идеи?- Спасибо