2017-01-27 1 views
0

다음 코드를 가지고 있으며 단순히 파일에 목록을 쓰려고합니다. 그렇지만 매번 빈 줄을 사용하면 반복 할 때마다 문제가 발생합니다!개행하지 않고 파일에 목록 작성하기 Python

with open("films.txt", mode='r') as f: 
allfilms=[] 

reader = csv.reader(f) 
for row in reader: 
    #create a list again which reads in and stores all films in the file 

    allfilms.append(row) 
    print(allfilms) 


with open("films.txt","w") as f: 
    writer=csv.writer(f) 
    writer.writerows(allfilms) 

출력은 다음과 같습니다 0, 장르, 제목, 평가, 목록을 저장할 때

언급 한 바와 같이
1,Sci-Fi,Out of the Silent Planet, PG, 0 

    2,Sci-Fi,Solaris, PG,0 

    3,Sci-Fi,Star Trek, PG, 0 

    4,Sci-Fi,Cosmos, PG, 0 

, 나는 빈 줄을 싶지 않아 좋아. 또한, 나는 똑같은 일을하는 더 우아하고 나은 방법에 관심이있을 것입니다. 나는 그 파일을 목록에 읽히고 파일에 저장된 것과 똑같은 형식으로 파일에 다시 쓰길 원한다. 사전에

감사

+4

시도.strip ('\ n')' – davedwards

+1

[file.write에 줄 바꿈 금지] 가능한 복제본 (http://stackoverflow.com/questions/1826400/suppress-linebreak-on-file-write) – MaLiN2223

+1

어떤 Python 버전을 사용하고 있습니까? 사용 하시겠습니까? Python 2에서 CSV 모듈은 파일이 바이너리 모드로 열리길 기대합니다. 파이썬 3에서는 제대로 작동하려면 'newline = ""'매개 변수를 사용하여 출력 파일을 열어야합니다. – Blckknght

답변

1

편집 : 나는이 대답을 쓴 때 CSV 모듈은 출력을 준 방법 오해,하지만 난 그것 때문에에 하향 변속으로 도움이 코멘트에 제거하고 있지 않다. 저의 가장 최근의 좀 더 정확한 답변을 참조하십시오.

downshift는 의견에서 이것을 대답했다. 그러나 나는 이것이 일어나고있는 이유에 대해 조금 더 자세하게 설명하려고 노력할 것이다.

csv 판독기에서 각 행을 읽을 때 마지막 행에 줄 바꿈 문자 (\n)가 포함 된 전체 행이 표시됩니다. 파일에 쓸 때 write 함수는 문자열 끝에 자신의 줄 바꿈 문자를 추가한다는 사실에서 기인합니다. 다행히 csv 리더에서 줄 바꿈 줄 끝에서 개행 문자를 제거하는 두 가지 아주 간단한 방법이 있습니다.

한 가지 방법은 .strip() 문자열의 메서드를 사용하는 것입니다.이 메서드는 문자열 형식의 일부 문자를 입력으로 사용하고 가능한 한 많은 문자를 문자열 끝에서 제거합니다. 당신이 대체 할 수있는이 방법을 사용 :

allfilms.append(row) 

allfilms.append(row.strip("\n")) 

는 문자열 슬라이스를 사용하여 문자열의 마지막 문자를 슬라이스 당신이 할 수있는 또 다른 방법

와 함께.

allfilms.append(row) 

allfilms.append(row[:-1]) 

row[:-1]

으로 돌아갑니다 : 나는 당신이 무엇을하고 있는지 명확하지 않기 때문에 당신이 이것에 대한 문자열 슬라이스를 사용하지만, 당신이 원한다면, 당신은 대체 할 권하고 싶지 않다 행의 마지막 문자를 제외하고 개행 문자를 버립니다.

희망이 도움이되었습니다.

+0

매우 도움이되는 설명입니다. 감사합니다. 그러나 AttributeError : 'list'객체에는 'strip'속성이 없습니다. row.strip ("\ n")과 함께 제안한 것을 사용하여 발생하는 오류 메시지입니다. 그 두 번째 제안 인 BlueCode가 효과가 있다고 말하면서! 감사합니다. –

+0

흥미롭게도 allfilms [3]는 목록의 세 번째 행을 만듭니다. 그러나, 그것이 의미가있는 경우에, 제 3의 줄의 제 4의 들판에 도착하는 방법 그러나 나는 알아야한다. 필자는 allfilms [3] [4]를 시도했으나 "범위를 벗어나는 인덱스 목록"이라는 오류가 발생했습니다. 이견있는 사람? –

+1

@pythoncarrot, Bluecode가 응답 할 때까지 내 생각을 제공합니다. 파이썬의리스트는 일반적으로 제로 인덱스 (즉, 첫 번째 요소에서 0부터 시작 함)이므로, 범위를 벗어난리스트 인덱스는 인덱스가 사용 가능한 것보다 높음을 나타냅니다.'allfilms [2] [3]'이 3 행 4 번째 색인으로 그 실수를 피하려고 노력하십시오. – davedwards

0

films.txt을 열었을 때 newline='' 인수를 포함하는 것을 잊었습니다. docs 사용을 말합니다. 이 코드가됩니다 의미 :`allfilms.append (행를 사용

with open("films.txt", mode='r', newline='') as f: 

with open("films.txt", mode='w', newline='') as f: 
관련 문제