2

我有很多CSV文件,我想将它们加入一个txt文件,binary格式..
以下代码给出了上述错误:

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文件的过程很复杂,因此,如果可能的话,我更喜欢在阅读之前以某种方式转换文件。
有什么建议么?

4

2 回答 2

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() 方法。

于 2013-10-20T14:31:30.627 回答
-2

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

于 2013-10-20T14:23:45.423 回答