2013-01-19 2 views
1
내가 CSV 외부 웹 서버에있는 파일을 읽을 파이썬 2.7 urllib.urlopen 사용하고

:오류 : 개행 문자가 인용되지 않은 필드에서 볼

# Try & Except statements removed for clarity 
import urllib 
import csv 
url = ... 
csv_file = urllib.urlopen(url) 
for row in csv.reader(csv_file): 
    do_something() 

모든 100 개 이상의 파일을 잘 읽을 수 있습니다를, 최근에 업데이트 된 하나를 제외하고는 반환 :

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

파일은 here 액세스 할 수 있습니다. 내 텍스트 편집기에 따르면, 그 모드는 Mac (CR)이고, 다른 파일에 대해서는 Windows (CRLF)와 반대입니다.

나는 this thread을 기반으로 python urlopen이 모든 형식의 뉴 라인을 올바르게 처리한다는 것을 알게되었습니다. 따라서 문제는 다른 곳에서 발생할 가능성이 큽니다. 나는 단서가 없다. 이 파일은 모든 텍스트 편집기와 스프레드 시트 편집기에서 열립니다.

문제를 진단하는 방법에 대해 아는 사람이 있습니까?

*이 EDIT *

파일의 작성자는 내가 같은 문제가 발생할 수있는 유일한 일이 아니었다 이메일로 저를 알렸다. 그래서 그는 다시 그것을하기로 결정했습니다. 위의 코드는 이제 다시 정상적으로 작동합니다. 아쉽게도 새 파일을 사용하면 문제를 더 이상 재현 할 수 없으며 솔루션이 제대로 테스트됩니다.

질문을 마치기 전에 솔루션을 찾아 여기에 게시하는 데 시간을 할애 한 스태커 모두에게 감사드립니다.

+1

이것은 구분 기호와 따옴표 같은 것을 처리하는'csv' 모듈의 오류와 같습니다. 'urllib' 모듈은 아마 잘 동작 할 것이고,'csv_file :'에'for row'를 시도해보십시오. csv 파일이 손상된 것처럼 들리거나 필요한 인용 형식을 처리하기 위해'csv' 리더를 구성해야합니다. –

+0

@AndersJohansson : 내가 파일 소유자로부터받은 이메일을 기반으로, 당신은 옳았 겠지만; 파일이 손상되었습니다. 위에서 설명한대로 솔루션을 테스트 할 시간이 없었습니다. – Matt

답변

1

그것은 손상된 .csv 파일을 할 수 있는가? 그렇지 않으면이 코드가 완벽하게 실행됩니다.

#!/usr/bin/python 

import urllib 
import csv 

url = "http://www.football-data.co.uk/mmz4281/1213/I1.csv" 
csv_file = urllib.urlopen(url) 

for row in csv.reader(csv_file): 
    print row 

크레딧은 .csv 파일의 경우 J.F. Sebastian입니다.

어쨌든 특정 .csv 파일을 우리와 공유하는 것이 좋습니다. 그래서 우리는 오류를 다시 만들려고 노력할 수 있습니다.

+0

Anders가 맞았습니다. 파일이 손상되었습니다. "불행히도"(물론 ...),이 손상된 파일은 대체되었으며 이전과 같은 모든 이전 코드로 모든 것이 올바르게 작동합니다. – Matt

+0

당신이 그것을 알아 낸 것을 기쁘게 생각합니다. 또한 세바스찬 (Sebastian)이 앞서 지적한 바와 같이 urllib2를 사용해야합니다. –

1

다음 코드는 오류없이 실행 :

#!/usr/bin/env python 
import csv 
import urllib2 

r = urllib2.urlopen('http://www.football-data.co.uk/mmz4281/1213/I1.csv') 
for row in csv.reader(r): 
    print row 
+0

urllib2를 사용해야한다고 지적 해 주셔서 감사합니다! – Matt

0

다운로드 한 CSV와 동일한 문제가있었습니다.

'rU'로 open을 사용하는 것이 좋습니다. 하지만 파일을 디스크에 저장하지 않고 단순히 변수를 열어 두는 것이 좋습니다. 그건 불필요한 것 같습니다.

file = open(filepath,'rU') 
mydata = csv.reader(file) 

누군가가 더 좋은 해결책을 가지고 있다면 좋을 것입니다.지금까지 나를이있어 유래 링크 :

Using Python, how do I to read/write data in memory like I would with a file?

:

CSV new-line character seen in unquoted field error

Open the file in universal-newline mode using the CSV Django module



나는 내가 실제로 stringIO, 또는 cStringIO, 또는 IO으로 원하는 것을 발견

나는 io 작업을 끝내고,

import csv 
import urllib2 
import io 
# warning its a 20MB csv 
url = 'http://poweredgec.com/latest_poweredge-11g.csv' 
urlRead = urllib2.urlopen(url).read() 
ramFile = io.open(urlRead, mode='w') 
openRamFile = open(ramFile, 'rU') 
csvCurrent = csv.reader(openRamFile) 
csvTuple = map(tuple, csvCurrent) 

print csvTuple 
관련 문제