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 jul.

fileup = models.FileField (verbose_name = "CsvFile", upload_to = 'ExcelFiles') customerbulk.objects.get (pk = 1)과 같은 작은 쿼리를 만드는 경우
mohd

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

파이썬> = 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
예, 파일을 연 직후에 파일의 시작 부분을 찾을 필요가 없습니다. 'rU'플래그가있는 >>> o = open (mypath, 'rU') 비트는 제 경우에 효과가 있었던 중요한 마술입니다.
rd108

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".
Xiao

근거를 설명하는 원래 PEP에 연결하는 @Xiao +1.
Naymesh Mistry

파이썬> = 3에서 사용 newline하는 대신, 기본값은 newline=None같이 인 newline=''그것은 또한에 줄 바꿈 변환을 제외하고 \n. 나는 것과 같습니다이 어떤 확실 해요mode='U'
timdiels
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.