在未引用的字段中看到的新行字符

时间:2013-07-21 09:07:13

标签: python django

我有一个从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:

中抛出错误

4 个答案:

答案 0 :(得分:7)

我在another post

中找到了解决方案

问题是我如何保存.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文件中的标题行。它应该与列名完全相同。