Невозможно загрузить несколько CSV-файлов одновременно и как заархивировать файлы в один с тем же кодом, который я написал - PullRequest
0 голосов
/ 15 марта 2019

У меня есть код, который написан в фляге Python, который будет читать данные из файла CSV и записывать в файл CSV все операции были сделаны из пользовательского интерфейса, поэтому из UI я выберу файл из системы и, когда нажмите Generate данные, которые он сгенерирует, и сбросят вновь сгенерированные данные в новый CSV-файл, и после выполнения операции CSV-файл будет автоматически загружен в локальный файл. Для скачивания одного файла я написал код :

import pandas as pd
df=pd.read_csv("test.csv")
do all operation here....
..........................
at last come with Generated data and store in dataframe
data = pd.DataFrame(final_Array) # "final_Array" contains the data

now performing download operation:
resp = make_response(data .to_csv(index=False,))
resp.headers["Content-Disposition"] = "attachment; filename=OutputData.csv"
resp.headers["Content-Type"] = "text/csv"
return resp

это выглядит так, как показано на рисунке: enter image description here Вы можете видеть, что в файл csv загружается имя «outputData.csv», поэтому так же, как я хочу загрузить несколько файлов в браузере, но я не понимаю, как это сделать. Теперь у меня есть три файла, который выглядит так:

data = pd.DataFrame(final_Array)
data1=result.drop(result.iloc[:,64:], axis=1)
data1.to_csv("C:\\Users\\rahul\\Desktop\\newCSVFile\\parts.csv",index=False)
data2=result.drop(result.iloc[:,8:64], axis=1)
data2=data2.drop(data2.iloc[:,19:],axis=1)
data2.to_csv("C:\\Users\\rahul\\Desktop\\newCSVFile\\Skills.csv",index=False)
data3=result.drop(result.iloc[:,8:75], axis=1)
data3.to_csv("C:\\Users\\rahul\\Desktop\\newCSVFile\\predict.csv",index=False)
return "done"

Я написал код для загрузки нескольких файлов одновременно:

cols.insert(0, cols.pop(cols.index('SrID')))
result = data.reindex(columns= cols)
data1=result.drop(result.iloc[:,64:], axis=1)
resp1 = make_response(data1.to_csv(index=False,))
resp1.headers["Content-Disposition"] = "attachment; filename=parts.csv"
resp1.headers["Content-Type"] = "text/csv"

data2=result.drop(result.iloc[:,8:64], axis=1)
data2=data2.drop(data2.iloc[:,19:],axis=1)
resp2 = make_response(data2.to_csv(index=False,))
resp2.headers["Content-Disposition"] = "attachment; filename=Skills.csv"
resp2.headers["Content-Type"] = "text/csv"

data3=result.drop(result.iloc[:,8:75], axis=1)
resp3 = make_response(data3.to_csv(index=False,))
resp3.headers["Content-Disposition"] = "attachment; filename=predict.csv"
resp3.headers["Content-Type"] = "text/csv"
return (resp1, resp2, resp3)

Это не работает для всех его работ, когда я буду возвращать один ответ за раз, я хочу загрузить все файлы одновременно .... пожалуйста, помогите мне получить этот путь ... Спасибо заранее

1 Ответ

1 голос
/ 16 марта 2019

Вы можете заархивировать несколько файлов, а затем загрузить их ... следующим образом:

data1=result.drop(result.iloc[:,64:], axis=1)
# data1=data1.to_csv("parts.csv") 

data2=result.drop(result.iloc[:,8:64], axis=1)
data2=data2.drop(data2.iloc[:,19:],axis=1)
# data2 = data2.to_csv("Skills.csv")

data3=result.drop(result.iloc[:,8:75], axis=1)
# data3 = data3.to_csv("predict.csv")

file_List = [data1, data2, data3]
name_list = ['parts.csv', 'skills.csv','predict.csv']

def zipFiles(file_List):
    outfile = io.BytesIO() 
    with zipfile.ZipFile(outfile, 'w') as zf:
        for name, data in zip(name_list, file_List):
           zf.writestr(name, data.to_csv())
    return outfile.getvalue()
zipped_file = zipFiles(file_List)
response = make_response(zipped_file)
response.headers["Content-Type"] = "application/octet-stream"
response.headers["Content-Disposition"] = "attachment; filename=anyFileName.zip"
return response

Это позволит заархивировать все 3 файла в один и загрузить как один файл

...