2016-10-06 9 views
0

複数のCSVファイルを1つに結合しようとしています。しかし、私は各列の間にスペースを得ています。csv writer予想されるバイトのような行間のスペース

私は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

あなたの方法は、Python 2.

に動作しますが、Pythonの3にあなたがバイナリモードでテキストファイルを開くことができないか、writeメソッドはバイトを期待しています。

パイソン3でそれを行うための正しい方法(とは、withブロックを出るときに、ファイルが閉じられることを保証withステートメント添加):

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

newlineパラメータ作品を省略しなく挿入します

編集:私はcsvモジュールのドキュメントをチェックしました。これを行うにはさらに良い方法があります。Python 2 で動作します。そして、これはおそらく問題です。 3、w HICHはCSV lineterminatorを変更することです:

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

私はいくつかの時間前に質問をし、ちょうどそれを反映するために私の答えを更新しました:portable way to write csv file in python 2 or python 3

EDIT 2:pythonのドンの2.7.12と3.5.2のバージョンをこのすべてが必要です。誰かが問題を解決したようだ。しかし、誰もが(会社のポリシー、特定のバージョンに応じて修飾されたツールのために)Pythonのマイナーバージョンをアップグレードすることはできません...

+1

正しい方法は 'with'ステートメントも使用しています。もちろん@LaurentLAPORTE –

+0

です。これが問題の一部ではないとしても、私は答えを編集しました。 –

関連する問題