我有一个从Django表单加载到内存中的文件。它给了我以下错误:
new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
另一种解决方案使用了this。
但是,我已将该文件存储在内存中,因此我需要将其更改为以"rU"
格式打开。
这是views.py
form = ResultsUploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
reader = csv.reader(request.FILES['file'])
for row in reader:
#etc...
有谁知道如何解决这个问题?从此语句for row in reader:
答案 0 :(得分:7)
问题是我如何保存.csv文件。在excel for mac中生成.csv文件时,将其保存为“Windows逗号分隔值(.csv)”这将停止在Django和python中添加import csv
的不需要的字符。
答案 1 :(得分:3)
您可以将阅读模式更改为' rU'而不是' r'或者' rb'
答案 2 :(得分:0)
这是我在从包含一些特殊符号的上传CSV文件中读取时避免上述错误的方法。
def utf_8_encoder(unicode_csv_data): //encodes the Unicode strings as UTF-8
for line in unicode_csv_data:
yield line.encode('utf-8')
def validate_csv(request):
csv_contents = request.FILES['files'].read().decode('utf-8-sig') // to avoid csv exception while reading unwanted characters (eg: \xef\xbb\xbf)
request_file = csv_contents.splitlines()
dict_reader = csv.DictReader(utf_8_encoder(request_file)) // avoid error - ascii' codec can't encode character u'\\ufeff' in position 0: ordinal not in range(128)
#because data contain some special symobls like G�mez
fieldnames = dict_reader.fieldnames //fieldnames contain column header
for item in dict_reader:
#etc...
答案 3 :(得分:-2)
检查csv文件中的标题行。它应该与列名完全相同。