csv writer期望字节和行之间的空格

时间:2016-10-06 09:33:44

标签: python python-3.x csv

我正在尝试将多个CSV文件合并为一个。但是我在每一行之间都有一个空格。

我在某处读到了我必须在filewriter = csv.writer(open("output.csv", "w"))

中将w更改为wb

但是这给了我以下错误:

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)

1 个答案:

答案 0 :(得分:2)

您的方法适用于Python 2。

但是在python 3中,你无法以二进制模式打开文本文件,或者write方法将需要字节。

在python 3中执行此操作的正确方法(添加了with语句,以确保在退出with块时文件已关闭):

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

(省略newline参数有效,但在Windows系统中插入&#34;空白&#34;行,因为额外的回车,这可能是您描述的问题)< / p> 编辑:我检查了csv模块文档,并且有更好的方法来实现这一点,使用python 2 3,即更改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

编辑2:2.7.12和3.5.2版本的python不需要这一切。似乎有人解决了这个问题。但不是每个人都可以升级甚至是python的次要版本(因为公司政策,取决于给定版本的合格工具......)