python - 上传固定格式的csv文件

标签 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

我遇到的一个问题示例是,当用户打开文件、输入数据并保存时,分隔符从 , 更改为 ;。由于文档在不同的程序中打开,例如 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/

相关文章:

python - 链接多个固定装置 pytest/unittest 混合

mysql - 使用 MySQL LOAD DATA IFILE 导入 .tsv 时跳过无效数据

python - 合并两个具有相同列的 DataFrame

r - 使用 `fread` 将 csv 文件从存档导入 `R` 而不提取到磁盘

python - 如何优化该 X 射线选择周期?

python - Matplotlib 中的 X 轴

python - 在 Python 和 pandas 中轻松格式化 : Unknown format codes

ruby - 如何检测 CSV (ruby) 中的最后一行

php - 将 6 个查询合并为 1 个结果集以进行导出?

python - 当我从 python 运行可执行文件并传递参数时,我什么也没得到