问题描述
我的问题是如何将 CSV 文件发送到 FTP 服务器.如您所见,以下脚本是我当前的代码:
My question is How can I send a CSV file to an FTP server. As you can see, the following script is the current code of mine:
代码示例:
def download_outage_info_all(request): upload_data = download_data_form(request.POST) if upload_data.is_valid(): print("valid") start = upload_data.cleaned_data['start_date_time'] end = upload_data.cleaned_data['end_date_time'] print(start, '-', end) start_timestamp = datetime.strptime( start, '%Y-%m-%d %H:%M') end_timestamp = datetime.strptime( end, '%Y-%m-%d %H:%M') try: info = planned_outages.objects.filter( start_timestamp__gte=start_timestamp, end_timestamp__lte=end_timestamp).values() except Exception as e: print("EXCEPTION", e) print("**** Data not found *** ") filename_date_part = datetime.now().strftime("%Y%m%d%H%M") response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment;filename=m_availability_' + filename_date_part + '.csv' writer = csv.writer(response, delimiter=';') writer.writerow(['starts YYYY-mm-dd HH:MM:SS', 'time_zone', 'ends YYYY-mm-dd HH:MM:SS', 'asset id', 'availability type', 'PowerKW']) for x in info: try: unit_mw = unit_details.objects.get( unit_id=x['unit_id_id']) # prints to csv file writer.writerow([x['start_timestamp'], 'UTC', x['end_timestamp'], unit_mw.unit_name,x['availability_type'], x['capacity_kw']]) except Exception as e: print("EXCEPTION", e) print("**** Data not found for unit_mw*** ") return response
这是一个 Django 视图,我不想将 CSV 保存在本地系统上,我只想将其直接发送到 FTP 服务器.谁能帮帮我?
This is a Django view, I don't want to save the CSV on my local system, I just want to directly send it to an FTP server. Can anyone help me?
推荐答案
将 CSV 文件写入内存中类似文件的对象(例如 BytesIO) 并上传:
Write the CSV file to an in-memory file-like object (e.g. BytesIO) and upload that:
from ftplib import FTP from io import BytesIO import csv flo = BytesIO() writer = csv.writer(flo, delimiter=';') writer.writerow(...) ftp = FTP('ftp.example.com') ftp.login('username', 'password') flo.seek(0) ftp.storbinary('STOR test.csv', flo)