我有一个.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
Run Code Online (Sandbox Code Playgroud)
我遇到的一个问题的例子是,当用户打开文件,输入数据并保存它时,分隔符会从更改,为;.我如何覆盖文档可以保存的各种类型的分隔符,因为它在不同的程序中打开,例如windows中的excel,mac中的excel,mac中的open office,linux中的open 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')
Run Code Online (Sandbox Code Playgroud)
啊刚刚找到了嗅探器类。
csvfile = open("example.csv", "rb")
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
# ... process CSV file contents here ...
Run Code Online (Sandbox Code Playgroud)