2

多くのファイルがあり、それらを1つのファイル形式CSVに結合したい.. 次のコードは上記のエラーを与えます:txtbinary

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() 

EDIT:ファイルはもともとタイプとして書かれてい
ます。一方、マージ ファイルはバイナリ形式である必要があります。 ファイルを作成するプロセスは複雑なので、可能であれば、ファイルを変換してから読み取ることを好みます。 助言がありますか?CSVtxt
CSV

4

2 に答える 2

7

Python は、バイナリ I/O とテキスト I/O を区別します。

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

バイナリ モード (mode 引数に 'b' を含む) で開かれたファイルは、内容をデコードせずにバイト オブジェクトとして返します。

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

テキスト モード (デフォルト、またはモード引数に 't' が含まれている場合) では、ファイルの内容は str として返されます。バイトは、プラットフォームに依存するエンコーディングを使用して、または指定された場合は指定されたエンコーディングを使用して最初にデコードされます。

すべてのストリームは、提供するデータのタイプに注意を払っています。たとえば、バイナリ ストリームのメソッドにstrオブジェクトを渡すと、 . テキスト ストリームの write() メソッドにバイト オブジェクトを渡す場合も同様です。write()TypeError

于 2013-10-20T14:31:30.627 に答える
-2

書き込み用にバイナリ モードでファイルを開くには、書き込むデータ型が str ではなく Python 3 バイト型である必要があります。それ以外の場合は、ファイルをバイナリ モードで開かないでください。

于 2013-10-20T14:23:45.423 に答える