2017-01-28 1 views
1
with open('call.txt', newline='') as inputfile: 
    phoneNumbers = list(csv.reader(inputfile)) 
이 코드 조각이 창문하지만 리눅스에서 작동

를 리눅스하지/BSD 내가 오류를줄 바꿈이 창문 작동하지만

예외가 "처리되지 않은 형식 오류" '줄 바꿈'는이 기능

에 대한 잘못된 키워드 인수입니다

이것을 크로스 플랫폼으로 어떻게 다시 작성할 수 있습니까?

+1

어떤 버전의 파이썬을 사용하고 있습니까? 'newline' arg는 단지 Py3입니다. – AChampion

+0

버전에 대한 불가지론 적 방법이 있는지 확신하지 못합니다. ''U ''모드를 시도 할 수 있습니다 (보편적 인 개행 지원을 가정 함). 이 기능은 Py2 및 3에서 사용할 수 있지만 더 이상 사용되지 않으며 권장되지 않는 옵션을 권장하지 않습니다. 다른 질문은 왜'newlines = '''가 필요한가요? – AChampion

+0

가능한 [Python에서 .CSV 파일을 작성하여 Windows에서 Python 2.7 이상 및 Python 3.3 이상에서 작동] (http://stackoverflow.com/questions/29840849/writing-a-csv-file-in-python -that-works-both-python-2-7-and-python-3-3-in) – cdarke

답변

0

아마도 파이썬의 이전 버전이 리눅스에서 실행되고있을 것입니다.

2

문제는 open()newline 인수는 파이썬 3에서 추가 존재하지 않는 한

파이썬 2에서 당신은 하나와 대상을 선택해야 파이썬 2 대 파이썬 3의,/BSD 리눅스 대 윈도우 아니다 스크립트에서 일관된 Python 버전.

2

두 가지 버전의 Python, 2.x 및 3.x를 사용하는 것처럼 들립니다. 불행히도 csv 파일을 여는 방법은 어느 것이 사용되는지에 따라 다르며, 파이썬 3에서는 newline=''을 지정해야하지만 파이썬 2에서는 open()에 유효한 키워드 인수가 아닌 것을 지정해야합니다. 모두가 정확했다

import sys 

def open_csv(filename, mode='r'): 
    """ Open a csv file proper way (depends on Python verion). """ 
    kwargs = (dict(mode=mode+'b') if sys.version_info[0] == 2 else 
       dict(mode=mode, newline='')) 
    return open(filename, **kwargs) 

# sample usage  
csvfile = open_csv('test.csv') 
+0

참조 http://stackoverflow.com/questions/29840849/writing-a-csv-file-in-python -that-works-for-both-python-2-7-and-python-3-3-in/29841468 # 29841468 – cdarke

+0

@cdarke : 링크 된 답변의 로직은 매우 유사합니다 (그러나 현재 파일을 쓰는 것만으로 하드 코딩되어 있습니다.). IMO는 함수에서 버전 체크를 이동하는 것이 더 효율적일 수 있지만 csv 파일을 여는 것은 대부분의 프로그램이 자주 최적화 할 가치가있는 (그리고 결과를 저장하기 위해 전역 변수를 만드는) 일은 없습니다. – martineau

0

감사 :

이 내가 두 버전에서 작동 CSV 파일을 여는 데 사용할 것입니다. 나는 파이썬 2와 3의 두 가지 버전을 가지고있다.이 파이썬 2는이 문제를 해결했다.