2016-10-06 2 views
0

여러 개의 CSV 파일을 하나로 결합하려고합니다. 하지만 각 행 사이에 공백이 생깁니다.csv 작성기에서 바이트 사이에 공백이 있고 행 사이에 공백이 있음

은 내가 filewriter = csv.writer(open("output.csv", "w"))

에 WB에 w를 변경했다 어딘가에 읽을 수 있지만이 나에게 다음과 같은 오류 제공 : 유일한 솔루션으로,

Traceback (most recent call last): 
    File "C:\Users\Rasmus\workspace\Portfolio\src\Companies.py", line 33, in <module> 
    collect() 
    File "C:\Users\Rasmus\workspace\Portfolio\src\Companies.py", line 31, in collect 
    Write.UpdateCSV(lst) 
    File "C:\Users\Rasmus\workspace\Portfolio\src\Write.py", line 11, in __init__ 
    filewriter.writerows(lst) 
TypeError: a bytes-like object is required, not 'str' 

나는이의 무엇을 할 모르겠어요를 내가 찾을 수있는 또 다른 오류를 줬어.

행 사이의 간격을 제거하는 다른 방법이 있습니까?

내 코드 :

import csv 
import Write 

paths = [ 
     'Finance.CSV', 
     'Energy.CSV', 
     'Basic Industries Companies.CSV', 
     'Consumer Durables Companies.CSV', 
     'Consumer Non-Durables Companies.CSV', 
     'Consumer Services Companies.CSV', 
     'Health Care Companies.CSV', 
     'Public Utilities Companies.CSV', 
     'Technology Companies.CSV', 
     'Transportation Companies.CSV' 
     ] 

def collect(): 
    lst = [] 

    for path in paths: 
     file=open('C:/Users/Rasmus/Desktop/Sectors/' + path, "r") 
     reader = csv.reader(file) 

     for line in reader: 
      tmpLst = [] 
      tmpLst.append(line[0]) 
      tmpLst.append(line[7]) 
      lst.append(tmpLst) 
      #print(line[0] + ", " + line[7]) 

    Write.UpdateCSV(lst) 

collect() 

import csv 

class UpdateCSV(): 
    def __init__(self, lst): 
     #print(lst) 
     #resultFile = open("output.csv",'w') 
     #wr = csv.writer(resultFile, dialect='excel') 

     filewriter = csv.writer(open("output.csv", "wb")) 

     filewriter.writerows(lst) 

답변

2

귀하의 방법은 파이썬 2

에서 작동하지만 파이썬 3에서 바이너리 모드에서 텍스트 파일을 열 수 없습니다 또는 write 메소드는 바이트를 기대합니다.

파이썬 3에서 그 일을하는 올바른 방법 (와는 with 블록을 종료 할 때 파일이 닫혀 있는지 보장 with 문 추가) :

with open("output.csv", "w", newline='') as f: 
    filewriter = csv.writer(f) 

합니다 (newline 매개 변수 작품을 생략을하지만 삽입 여분의 캐리지 리턴 때문에 Windows 시스템의 "빈"라인이 나타납니다.)

EDIT : csv 모듈 설명서를 확인했습니다. 더 좋은 방법이 있는데, 파이썬 2 3, w 나는 몇 시간 전에 질문을했다 그냥 그 반영하기 위해 내 대답을 업데이트

with open("output.csv","w") as f: 
    filewriter = csv.writer(f,lineterminator="\n") 

: HICH는 CSV lineterminator 변경하는 것입니다 portable way to write csv file in python 2 or python 3

편집 2 : 2.7.12 및 파이썬의 3.5.2 버전 돈 이 모든 것이 필요하지 않습니다. 누군가가 선을 위해 문제를 해결 한 것 같습니다. 하지만 모든 사람들이 파이썬의 부 버전을 업그레이드 할 수있는 것은 아닙니다. (회사 정책, 주어진 버전에 따라 적합한 도구 ...)

+1

올바른 방법은'with' 문을 사용하는 것입니다. –

+0

@LaurentLAPORTE 물론. 이것이 문제의 일부가 아니더라도 대답을 편집했습니다. –

관련 문제