【问题标题】:Django: Read uploaded CSV file using FileField instanceDjango:使用 FileField 实例读取上传的 CSV 文件
【发布时间】:2018-04-29 05:07:26
【问题描述】:

我正在尝试读取用户在 FileField 类型的字段中上传的 .csv 文件的数据。我访问该对象没有问题,但我似乎无法使其与csv 模块一起使用。这是我正在尝试的:

reader = csv.reader(object.uploaded_file.read())
for rows in reader:
...

object 是我的模型的一个实例,uploaded_file 是相应的字段。

我收到此错误:

iterator 应该返回字符串,而不是 int(您是否以文本形式打开文件 模式?)

还有,

我尝试使用open() 方法,但没有成功。关于这个主题的文档似乎很模糊。更糟糕的是,我在上面使用的read() 方法中唯一能找到的是:

除了列出的方法之外,File 还公开了以下方法 其文件对象的属性和方法:encoding、fileno、flush、 isatty, 换行符, read, readinto, readline, readlines, seek, 软空间,告诉,截断,写,写线,xreadlines,可读(), 可写()和可搜索()。

编辑

我知道这可能与阅读模式有关,有这个thread 建议,但在这种情况下我该如何更改模式?

【问题讨论】:

    标签: python django csv


    【解决方案1】:

    这是我的解决方法(因为在 FileField 上传的情况下,您不需要“打开”已打开的文件)。

    import csv
    from io import StringIO
    
    def parse_file(self, csv_upload):
        file = csv_upload.read().decode('utf-8')
        csv_data = csv.reader(StringIO(file), delimiter=',')
        for row in csv_data:
            print(row)
    

    【讨论】:

      【解决方案2】:

      我终于找到了解决办法:

       reader = csv.reader(open(object.uploaded_file.path,'r'))
      

      我没有使用File 对象的内置read()open(),正如我在我的问题中所说的那样文档很少,而是使用path 属性。

      【讨论】:

        猜你喜欢
        • 2021-11-04
        • 2021-05-21
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 2011-02-02
        • 1970-01-01
        相关资源
        最近更新 更多