如何将数据帧转换为csv并保存以返回它?

时间:2019-10-14 21:24:53

标签: python django pandas

我正在读取.xlsx文件并将其转换为.csv,但我需要将其作为.csv返回,因为我无权访问应将其存储的路径。我只能将其作为数据框返回。任何帮助将不胜感激。谢谢。

import pandas as pd


def excel_to_csv(myfile):
    print(myfile)
    data_xls = pd.read_excel(myfile,  index_col=None)
    data_xls.to_csv(encoding='utf-8', index=False)
    return(data_xls)

myfile = request.FILES['file']
if myfile.name.endswith('.xlsx'):
    myfile=excel_to_csv(myfile)



2 个答案:

答案 0 :(得分:1)

如果您只想读取Excel文件并获取与打印到屏幕上的csv相同的数据,则以下内容可能会有用。

def excel_to_csv(file):
    df = pd.read_excel(file)
    csv_data = df.to_csv(encoding='utf-8', index=False)
    return csv_data

如果您确实要保存文件,我想我需要更多有关正在使用的系统以及您要实现的目标的信息。

答案 1 :(得分:1)

如果您使用的是Django,只需将其保存到/media/根目录中,然后您就可以通过url访问它了

首先,您需要了解 settings.py MEDIA_ROOTMEDIA_URL的配置。

如果不存在,则可以创建一个

[ settings.py ]

MEDIA_ROOT = os.path.join(BASE_DIR, 'myproject/static')
MEDIA_URL = '/media/'

然后,确保已将媒体配置​​添加到 urls.py

from django.conf.urls.static import static

urlpatterns = [
    # Project url patterns...
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

由于提到了此代码myfile = request.FILES['file'],所以我假设您在 views.py 中。最后但并非最不重要的一点是,我们需要FileSystemStorage API。

你去了

[ views.py ]

from django.core.files.storage import FileSystemStorage

def upload(request):
    if request.method == "POST":
        csv_file = request.FILE['file']
        fs = FileSystemStorage()
        name = fs.save(csv_file.name, csv_file)
        print(f"file_name = {fs.url(name)}"
    return render(request, 'somepage.html')

通过url访问文件, www.yourhost.com/media/file_name