2013-02-26 1 views
2

나는 CSV-파일이 개 다른 유형을 읽을 수 다음을 통해 사용 :두 가지 CSV 유형에 대해 csv.Sniffer를 사용하는 방법은 무엇입니까?</li> </ul> <p>구분 기호로 <code>';'</code>와</li> <li>하나의 내가 난 어떤 구분자를 확인하려 구분 기호로 <code>','</code>와</p> <ul> <li>하나

dialect = csv.Sniffer().sniff(csvfile, [',', ';']) 
data = csv.reader(csvfile, dialect) 

그러나 그 다음 나는 TypeError : expected string or buffer을 얻습니다.

이렇게하면 작동하지만 구분 기호를 사용할 때를 알 수 없습니다.

data = csv.reader(csvfile, delimiter = ",") 
data = csv.reader(csvfile, delimiter = ";") 

누군가 나를 도와 줄 수 있습니까?

답변

13

Sniffer는 파일이 아닌 sample string을 필요로합니다. 당신이해야합니다 모든이다 : 당신이 작성한 Readline 명령을 사용하여 파일에 사용자의 현재 위치를 이동하기 때문에

dialect = csv.Sniffer().sniff(csvfile.readline(), [',',';']) 
csvfile.seek(0) 
data = csv.reader(csvfile, dialect) 

은 중요 추구, 당신은 파일의 시작 부분에 다시 재설정해야합니다. 그렇지 않으면 데이터가 손실됩니다.