简体   繁体   English

如何使用 request.FILES(django 1.11) 将 csv 文件数据加载到 Pandas 中而不在服务器上保存文件

[英]how to load csv file data into pandas using request.FILES(django 1.11) without saving file on server

i just want to upload .csv file via form, directly in to pandas dataframe in django without saving physically file on to server.我只想通过表单将 .csv 文件直接上传到 django 中的 Pandas 数据帧,而无需将物理文件保存到服务器上。

def post(self, request, format=None):
        try:
            from io import StringIO, BytesIO
            import io
            print("data===",request.FILES['file'].read().decode("utf-8"))
            # print("file upload FILES data=====",pd.read_csv(request.FILES['file'].read(), sep=','))
            #print(request.FILES)
            print("file upload data df=====11")
            mm = pd.read_csv( BytesIO(request.FILES['file'].read().decode("utf-8")))
            print("dataframe  data=====",mm)
            # import io, csv
            # urlData = request.FILES['file']
            # data = [row for row in (csv.reader(urlData))]
            # print("file upload data df=====222",data)

            # mm = pd.read_csv()

            #excel_file = request.FILES['file']
            # movies = pd.read_excel(request.FILES['file'])
    except Exception as e:
        print(e)
        log.debug("Error in CheckThreadStatus api key required "+str(e))
        return Response(responsejson('api key required', status=404))

the ans is straight forward: that is答案很简单:就是

    pd.read_csv(request.FILES['file'])

works perfectly fine, the mistake i was doing is that.. my csv file was not in correct format.工作得很好,我做的错误是..我的 csv 文件格式不正确。

Check With pd.read_csv('data.csv') # doctest: +SKIP检查 pd.read_csv('data.csv') # doctest: +SKIP

If using post method you can try getFile = request.FILE['file_name']如果使用 post 方法,您可以尝试 getFile = request.FILE['file_name']

pd.read_csv(getFile) # doctest: +SKIP pd.read_csv(getFile) # doctest: +SKIP

You can use StringIO for reading and decoding your csv :您可以使用StringIO来读取和解码您的csv

import csv
from io import StringIO


csv_file = request.FILES["csv_file"]
content = StringIO(csv_file.read().decode('utf-8'))
reader = csv.reader(content)

After reading you can populate your database like this :阅读后,您可以像这样填充数据库:

csv_rows = [row for row in reader]
field_names = csv_rows[0]  # Get the header row
del csv_rows[0] # Deleting header after storing it's values in field_names

for index, row in enumerate(csv_rows):
   data_dict = dict(zip(field_names, row))
   Model.objects.update_or_create(id=row[0],
     defaults=data_dict
   )

Make sure to validate data before inserting, if the data is critical.如果数据很重要,请确保在插入前验证数据。

HINT: use django forms to validate for you.提示:使用 Django 表单为您验证。
from django import forms

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM