上传具有固定格式的csv文件

sup*_*er9 6 python 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
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)

sup*_*er9 1

啊刚刚找到了嗅探器类。

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)