我有一个 .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 在 windows 中,excel 在 mac 中,在 mac 中打开 office,在 linux 中打开 office 等,我如何涵盖可以保存文档的各种类型的分隔符
另一个问题示例是,当用户尝试将数据复制并粘贴到提供的模板中时,一切都乱套了。
更新
我现在正在使用 Sniffer
类,如以下答案之一所述,但它仍然不是万无一失的。
更新的代码片段
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 是一种非格式。 Sniffer
类并非万无一失,因为它实际上 不可能 100% 可靠地检测所有给定的方言。
我认为您将不得不在 90% 的工作时间内使用 Sniffer
,并捕获无效的输入文件、分析它们并扩展 Sniffer
去捕获他们。
关于python - 上传固定格式的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929605/