Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型错误:';str';不支持缓冲区接口,Python 3_Python_Csv - Fatal编程技术网

类型错误:';str';不支持缓冲区接口,Python 3

类型错误:';str';不支持缓冲区接口,Python 3,python,csv,Python,Csv,我有许多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

我有许多
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
文件的过程很复杂,因此,如果可能的话,我更愿意在阅读之前以某种方式转换文件。

有什么建议吗?

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

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()方法提供一个bytes对象也是如此。

我已经将文件设置为str类型,尽管我需要合并的文件采用二进制格式。我可以做任何转换过程吗?问题已经编辑好了。谢谢你现在的回答。