Python 从Django访问上载的文件
我正在设计一个允许用户上传.xls文件的web应用程序。上传时,应保存文件,并将其转换为.csv文件,然后通过python导入脚本导入文件中包含的数据 所有用于导入和转换数据的功能都在shell中完全可用,但是,当通过本地主机进行测试时,文件将转换为.csv并保存,但没有脚本在新文件上运行 从views.py:Python 从Django访问上载的文件,python,django,csv,web,file-upload,Python,Django,Csv,Web,File Upload,我正在设计一个允许用户上传.xls文件的web应用程序。上传时,应保存文件,并将其转换为.csv文件,然后通过python导入脚本导入文件中包含的数据 所有用于导入和转换数据的功能都在shell中完全可用,但是,当通过本地主机进行测试时,文件将转换为.csv并保存,但没有脚本在新文件上运行 从views.py: #for uploading data on the dashboard def file_upload(request): if request.met
#for uploading data on the dashboard
def file_upload(request):
if request.method == 'POST':
save_path = os.path.join(str(settings.MEDIA_ROOT), 'uploads', str(request.FILES['file']))
try:
validate_file_extension(request.FILES['file'])
path = default_storage.save(save_path, request.FILES['file'])
data = xls_to_csv(save_path, str(settings.MEDIA_ROOT))
create_athlete(data, filename)
create_phase(data)
create_health_report(data)
create_workout_report(data)
except:
return redirect('polar:dashboard')
return redirect('polar:dashboard')
来自importscript.py
def xls_to_csv(file_name, save_path):
#Formats into pandas dataframe.
formatted_dataframe = pd.read_excel(file_name, index_col=None)
#Converts the formatted into a csv file and save it.
file_name = file_name.replace('.xls', '.csv')
new_file = formatted_dataframe.to_csv(file_name))
module_dir = os.path.dirname(settings.BASE_DIR)
file_path = os.path.join(module_dir, 'uploads', file_name)
sample_data = open(file_name, 'r')
unfiltered_data = sample_data.readlines()
data = unfiltered_data[1:]
return data
就好像Django正在阻止打开和读取新创建的.csv文件。任何关于解决此问题的提示都将不胜感激 如果在Linux或Mac环境下工作,则必须授予上载目录读写权限。 或者,如果这不是问题所在,那么您似乎在处理xls到CSV文件时遇到了问题。请看这一个
import xlrd
import unicodecsv
def xls2csv (xls_filename, csv_filename):
# Converts an Excel file to a CSV file.
# If the excel file has multiple worksheets, only the first
#worksheet is converted.
# Uses unicodecsv, so it will handle Unicode characters.
# Uses a recent version of xlrd, so it should handle old .xls and
# new
#.xlsx equally well.
wb = xlrd.open_workbook(xls_filename)
sh = wb.sheet_by_index(0)
fh = open(csv_filename,"wb")
csv_out = unicodecsv.writer(fh, encoding='utf-8')
for row_number in xrange (sh.nrows):
csv_out.writerow(sh.row_values(row_number))
fh.close()
摘自您当前的代码是什么?不幸的是,我已经在自己的计算机上尝试过了,我的两名团队成员也尝试过。这似乎是Django方面的一个问题。你说的工作是什么意思?我们正在为我们大学的体育系开发一个应用程序,因此数据非常敏感,因为它与学生运动员及其私人信息有关。我指的是我看到你已经添加的示例代码。让我研究一下您的问题,看看是否可以提供帮助?尝试添加表单中已经存在的html表单标记enctype=“multipart/form data”。一切都在上传端工作,但问题似乎出现在xls_to_csv函数中,当尝试在将文件输入create_*函数之前打开文件时。