2013-10-20 69 views
2

我有很多CSV文件,我想那么它们连接成一个txt文件,binary格式..
下面的代码给上述错误:类型错误:“STR”不支持缓冲区接口,Python的3

import os 
from csv import reader 
from csv import writer 

CONST_DATA_DIR = "F:/Data/" 
CONST_DATABIN_DIR = "F:/DataBinary/" 


def createFilesArr(): 
    filesArr = [] 
    os.chdir(CONST_DATA_DIR) 
    for file in os.listdir("."): 
     if file.endswith(".csv"): 
      filesArr.append(file) 
    return filesArr 


filesArr = createFilesArr() 

newFileName = "oneBinaryFile.txt" 
newFile = open(CONST_DATABIN_DIR + newFileName, 'wb') 

for file in filesArr: 
    currentFile = open(CONST_DATA_DIR + file, 'r', newline='', encoding='UTF8') 
    newFile.write(currentFile.read()) 
    currentFile.close() 

newFile.close() 

编辑:
CSV文件最初写成txt类型。另一方面,合并文件应该是二进制格式。
创建CSV文件的过程很复杂,因此,如果可能的话,我宁愿在阅读之前以某种方式转换文件。
有什么建议吗?

回答

7

Python区分二进制和文本I/O。

newFile = open(CONST_DATABIN_DIR + newFileName, 'wb') 

以二进制模式打开的文件(包括模式参数中的'b')在没有任何解码的情况下将内容作为字节对象返回。

currentFile = open(CONST_DATA_DIR + file, 'r', newline='', encoding='UTF8') 
newFile.write(currentFile.read()) 

在文本模式(默认值,或当“T”被包括在模式参数),该文件的内容被返回为STR,虽然已经首先使用依赖于平台的编码解码的字节或如果给定,使用指定的编码。

所有流都注意你给他们的数据类型。例如,给str对象添加二进制流的write()方法将会引发TypeError。所以将一个字节对象给一个文本流的write()方法。

+0

这个问题已被编辑。感谢您的当前答案。 – Presen

-2

打开文件以二进制模式写入要求要写入的数据类型是Python 3字节类型而不是str。否则,请不要打开文件二进制模式。

+0

我已经有文件作为str类型,虽然我需要合并文件为二进制格式。我可以做任何转换过程吗? – Presen

相关问题