Django - 导入CSV文件时保留换行符
我在Django中上传和导入一个CSV文件。每一行都有一个“描述”字段,这个字段可能会有换行符。目前,当我把数据保存到Django的TextField时,所有的换行符都消失了,这导致所有的格式都丢失了。用户不得不去网页门户或管理控制台手动调整描述字段的文本格式。这对于成百上千条记录来说,真的很麻烦,也很耗时间。
有没有办法在导入CSV文件时保持格式呢?
目前我使用的是:
file = request.FILES['csv_file']
csv_file_data = [row for row in csv.reader(file.read().splitlines())]
2 个回答
0
我在使用 django-import-export 时也遇到了同样的问题。
最后我选择重写了 import_field
这个方法(不过如果有更好的方法,请告诉我):
# admin.py
from django.db.models.fields import TextField
class YourModelResource(resources.ModelResource):
def import_field(self, field, obj, data, is_m2m=False):
field_model = YourModel._meta.get_field(field.column_name)
# keep linebreaks in TextField columns
if type(field_model) == TextField:
data[field.column_name] = data[field.column_name].replace('\n', '<br />\n')
field.save(obj, data, is_m2m)
2
来自 这里:
def splitkeepsep(s, sep):
return reduce(lambda acc, elem: acc[:-1] + [acc[-1] + elem] if elem == sep else acc + [elem], re.split("(%s)" % re.escape(sep), s), [])
所以:
file = request.FILES['csv_file']
# Updated to reflect OP's comments:
csv_file_data = [row for row in csv.reader(splitkeepsep(file.read(), '\n'), dialect=csv.excel_tab)]