【问题标题】:django read dynamic csv file errordjango读取动态csv文件错误
【发布时间】:2018-04-03 18:35:57
【问题描述】:

我编写了 Django python csv 阅读器,但它不能正常工作。我可以看到文件已上传到系统,但我无法读取它并收到以下错误:

Exception Type: AttributeError 
Exception Value:     'str' object has no attribute 'read'
data = csv.reader(open('tmp/tmp.csv'), delimiter=";")

当我按照上述静态使用时,它正在工作,但我需要通过文件上传接收的动态。我需要你的帮助,因为我没有办法解决这个问题。 我知道 decoded_file、io_string 和 data 变量无法正常工作但无法修复它们。

def upload_csv(request):
    if request.method == 'POST' and request.FILES['csv_file']:
        myfile = request.FILES['csv_file']
        fs = FileSystemStorage()
        filename = fs.save(myfile.name, myfile)

        decoded_file = filename.read().decode('utf-8')
        io_string = io.StringIO(decoded_file)
        data = csv.reader(io_string, delimiter=';', quotechar='|')
        for row in data:
            if row[0] != 'FP_Item':
               post = FP()
               post.FP_Item = row[0]
               post.save()

CSV 文件:不多,因为仍然导入试验,只有 2 行。有 ;最后但我删除并重试仍然相同

5.Item try
Try

【问题讨论】:

    标签: python django csv


    【解决方案1】:

    您尝试在 csv.reader 中读取字符串。您在 upload_csv 中更改代码:

    def upload_csv(request):
        if request.method == 'POST' and request.FILES['csv_file']:
            myfile = request.FILES['csv_file']
            fs = FileSystemStorage()
            filename = fs.save(myfile.name, myfile)
            print "filename",filename
            data = csv.reader(fs.open(filename, mode='r'), delimiter=str(u';').encode('utf-8'), quotechar=str(u'"').encode('utf-8'))
            for row in data:
                print "row: ",row
    

    【讨论】:

    • 我仍然收到相同的错误异常类型:AttributeError 异常值:'str' 对象没有属性'read'
    • 我在这一行收到此错误:decoded_file = filename.read() 不接受读取文件名变量。这是什么原因造成的?
    • 我编辑这一行: decoded_file = fs.open(filename) 。试着告诉我是否有效
    • filename 是要保存的文件的名称。您需要在 fs.filename 中打开文件名。您在代码中更改此行: decoded_file = filename.read().decode('utf-8') 使用此行 decoded_file = fs.open(filename).read().decode('utf-8')跨度>
    • 是的,现在可以了。:) 非常感谢您的关注。
    猜你喜欢
    • 2020-05-05
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2010-09-30
    • 2022-11-03
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多