读取csv方式
import csv
csv_reader = csv.reader(open("C:/Users/Administrator/Desktop/用户.csv", encoding='utf-8'))
for row in csv_reader:
print(row)
写入csv方式
DictWriter 类
import csv
headers = ['name', 'age', 'sex','tel']
rows_dict= [
{'name': '黄', 'age': 12,'sex': 1,'tel': 110},
]
with open(path, 'w', encoding='UTF8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
writer.writerows(rows_dict)
写入多行数据
headers = ['姓名', '年龄', '性别', '手机号']
rows = [
['黄', '20', '女', '110'],
['黄', '21', '女', '110'],
['黄', '22', '女', '110']
]
with open(path, 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerow(headers) # 写入头部
writer.writerows(rows) # writerows 多行写入, writerow 单行写入
django FileResponse 实现文件下载
def index(request):
from io import BytesIO
from datetime import datetime
from django.http import FileResponse
headers = ['姓名', '年龄', '性别', '手机号']
rows = [
['黄', '20', '女', '110'],
['黄', '21', '女', '110'],
['黄', '22', '女', '110']
]
f = BytesIO()
f.write(('\uFEFF' + ','.join(headers) + '\n').encode('utf8'))
for row in rows:
f.write((','.join(row) + '\n').encode('utf8'))
filename = 'user-' + datetime.now().strftime("%Y%m%d%H%M%S") + '.csv'
f.seek(0)
data = f.read()
f.close()
resp = FileResponse(data.decode())
resp['content_type'] = "application/octet-stream"
resp['Content-Disposition'] = f"attachment;filename={filename}"
return resp
上传文件写入数据库
def file_test_import(request):
if request.method == 'POST':
file = request.FILES.get("file")
# from django.core.files.uploadedfile import InMemoryUploadedFile
import re
# file: InMemoryUploadedFile = file
for line in file.readlines()[1:]:
# 空行跳过
if not line.strip(): continue
try:
row_list = re.split(',|\t', line.decode("utf-8").strip())
except:
row_list = re.split(',|\t', line.decode("gbk", errors='ignore').strip())
# 写入数据库
print(row_list)
return HttpResponse()