Python 파일 readline 후 새 파일 작성시 \n가 붙는 경우


test.csv 라는 파일을 읽어서 테스트.csv 라는 새로운 파일을 만드는 코드입니다.

다른 부분은 삭제하고 문제가 되는 부분만 올려봅니다. 결과적으로는 다른 방법으로 해결을 했는데, 이해가 안가는 부분이 있어 질문드립니다.

다음과 같이 작성시 원본파일의 레코드들은 아무런 공백도 없으나 새로운 파일에서 모든 레코드 뒤에 \n 가 붙어 레코드의 길이를 카운트하면 원 값보다 더 길게 나옵니다.

값을 세는 코드는 따로 작성했지만 밑의 코드에서 어느 부분 때문에 \n 가 붙는지 궁금합니다.

file='C:/test.csv'
with open('C:/테스트.csv','w',newline='') as testfile:
    csv_writer=csv.writer(testfile)
    with open (file,'r') as infile:
        for line in infile:
            lst=[line]
            csv_writer.writerow(lst)
  • 2017년 08월 07일에 작성됨

조회수 186


2 답변


좋아요
0
싫어요
채택취소하기

질문하신 분의 의도는 보이지 않던 /n이 어디서 등장했으며, /n을 제외하고 카운트가 되어야 하는게 아니냐라는 것 같습니다.

하지만 위에 정영훈님이 말씀하신 것처럼 라인피드(/n)는 보이지만 않았고 기본적으로 존재하며 단어의 수를 세면 카운트 되는 것이 정상입니다.

예시로 보여드리면 다음과 같습니다.

#test.csv 내용은 a입니다. b입니다. c입니다. 
#한줄씩 띄어져 있는 상태입니다.
with open('C:/Users/CEO/Desktop/test.csv','r') as testfile:    
    for line in testfile :
        a=line
        print(len(a),type(a),a)


#결과값은 다음과 같습니다.
>> 6 <class 'str'> a입니다.
>> 6 <class 'str'> b입니다.
>> 6 <class 'str'> c입니다.

a입니다. 를 풀어보면 a, 입, 니, 다, . 이렇게 다섯개로 보입니다. 하지만 len이 6이 되는 이유는 /n도 카운트가 되기 때문입니다.

그래도 잘 모르겠다하시면

 print(a[0])
 print(a[1])
 print(a[2])
 print(a[3])
 print(a[4])
 print(a[5])

를 해보시면 /n이 값으로 존재한다는 사실을 알 수 있습니다.


  • 결국 코드에서가 아니라 파일 자체에서 한 줄이 끝나면 다음줄을 갈때 라인피드가 붙는거겠네요. 감사합니다    김도훈   2017.8.9 10:21     

당연히 라인피드(\n, \r\n)가 붙어야겠죠.

csv라는 것은 그냥 텍스트파일입니다.

a,a,a,a
b,b,b,b

에서 \n이 없다면

a,a,a,ab,b,b,b

가 됩니다.

원하는 결과가 아니겠죠.

  • 2017년 08월 08일에 작성됨

  • 어느 부분에서 붙는지 궁금했는데, CSV 라는 파일자체에서 붙는거군요. 감사합니다    김도훈   2017.8.9 10:20     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close