CSV Djangoモジュールを使用して、ファイルをユニバーサル改行モードで開きます


86

モジュールを使用してPythonでCSVファイルmodel.filefieldを解析するためにDjangoのにアクセスしようとしています。Windowsでは動作しますが、Macでは次のようになります。csv

Exception Type: Error

Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

これはコードです:

myfile = customerbulk.objects.all()[0].fileup

mydata = csv.reader(myfile)
    for email,mobile,name,civilid in mydata:
        print email,mobile,name,civilid

これは何customerbulk.objects.all()[0].fileupですか。モデルのファイル名ですか?
singleNegationElimination 2011

fileup = models.FileField(verbose_name = "CsvFile"、upload_to = 'ExcelFiles')customerbulk.objects.get(pk = 1)のような小さなクエリを実行した場合
mohd 2011

1
使用する正確な理由rU(open()関数に関連しており、csv固有ではありません。):In addition to the standard fopen() values mode may be 'U' or 'rU'. Python is usually built with universal newlines support; supplying 'U' opens the file as a text file, but lines may be terminated by any of the following: the Unix end-of-line convention '\n', the Macintosh convention '\r', or the Windows convention '\r\n'. docs.python.org/2/library/functions.html#open
zengr

Python> = 3では、のnewline=''代わりにを使用しますmode='U'
tricasse

回答:


150

私はついに解決策を見つけました:

mypath = customerbulk.objects.get(pk=1).fileup.path
o = open(mypath,'rU')
mydata = csv.reader(o)

2
これを単純化できると思います。ファイルを開いた直後に最初からやり直すのは奇妙に思えます。以下は、デフォルトを使用してExcelスプレッドシートをCSVにエクスポートする同じ問題を克服するのに役立ちました:data = csv.reader(open(FILENAME、 'rU')、quotechar = '"'、delimiter = '、')
timbo

4
はい、開いた直後にファイルの先頭を探す必要はありません。>>> o = open(mypath、 'rU')ビットと 'rU'フラグは、私の場合に機能した重要な魔法です。
rd108 2013年

13
PEP278は何の説明rU:の略In a Python with universal newline support open() the mode parameter can also be "U", meaning "open for input as a text file with universal newline interpretation". Mode "rU" is also allowed, for symmetry with "rb".

理論的根拠を説明する元のPEPにリンクするための@ Xiao + 1。
Naymesh Mistry 2017

Python> = 3では、newline代わりにを使用します。デフォルトは、改行をに変換することを除いて、newline=Noneと同じです。私はと等価であるこれらのどのわからないよnewline=''\nmode='U'
timdiels
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.