У меня есть. CSV-файл, который мои пользователи загружают, вводят некоторые данные и загружают на мой сайт.Загрузка CSV-файла с фиксированным форматом
Есть ли лучший способ гарантировать, что данные будут загружены успешно на основе моего фрагмента ниже? Что еще я должен проверять? Будет ли использовать диалект лучше?
def import(resident_file):
try:
file = resident_file.file.path
reader = csv.reader(open(file, 'rU'), delimiter=',', quotechar='"')
headerline = reader.next()
for row in reader:
try:
# do stuff
except Exception, e:
print e
except Exception, e:
print e
Пример проблемы, я бегу в том, что, когда пользователь открывает файл, данные входы и сохраняет его, разделители изменяются от ,
к ;
. Как я могу покрыть различные типы разделителей, чтобы документ мог быть сохранен из-за того, что он был открыт в разных программах, например, Excel в Excel, Excel в mac, открытый офис на Mac, открытый офис в Linux и т. Д.
Другой пример проблема в том, когда пользователь пытается скопировать и вставить данные в предоставленный шаблон, все ад разрывается.
UPDATE Я использую Sniffer
класс теперь, как упоминалось в одном из ответов ниже, но его до сих пор не дурак доказательство.
ОБНОВЛЕНО КОД SNIPPET
def bulk_import_residents(condo, resident_file):
"""
COL 1 COL 2 COL 3 COL 4 COL 5
first_name last_name contact_number unit_number block_number
"""
file_path = resident_file.file.path
csvfile = open(file_path, 'rb')
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
headerline = reader.next()
for row in reader:
try:
data = ResidentImportData()
data.condo = condo
data.file = resident_file
data.first_name = row[0]
data.last_name = row[1]
data.contact_number = row[2]
data.unit_number = row[3]
data.block_number = row[4]
data.save()
except Exception, e:
print '{0}'.format(e)
raise Http404('Wrong template format')
Если ваши пользователи используют инструмент для редактирования csv, тогда было бы легче придерживаться соглашений, используемых этим инструментом. – jcollado
Просто убедитесь, что вы рассмотрели использование редактора табличных таблиц в виде облаков (например, Google Docs, например), чтобы позволить вашим пользователям делать свои изменения напрямую, вместо того, чтобы загружать, редактировать и загружать? –
Нет, у меня нет, но это фантастическое предложение. – super9