2013-10-20 86 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

相關問題