在python中编码几个连接文件的问题?

时间:2014-12-09 20:23:29

标签: python python-2.7 encoding character-encoding

我有一个包含许多西班牙语.txt文件的文件夹,我决定将它们合并到一个.txt文件中,如下所示:

导入操作系统 import shutil

def concatFiles():
    path = '/Users/user/Desktop/OpinionsTAG_txt/'
    files = os.listdir(path)
    with open("/Users/user/Desktop/concat_file.txt", "wb") as fo:
        for f in files:
            with open(os.path.join(path, f), "rb") as fi:
                shutil.copyfileobj(fi, fo)


if __name__ == "__main__":
    concatFiles()

问题是输出(即concat_file)不尊重字符西班牙语编码,例如在concat_file direcci√≥n而不是dirección。另一件事是我在OS X中工作,当我用升华文本打开concat_file它看起来像这样:0000 0001 2000 0000 0000 0001 4000 0000当我用文本编辑打开concat_file它看起来像我想要,为什么会发生这种情况,我该如何解决呢?

1 个答案:

答案 0 :(得分:1)

尝试使用编解码器,如下所示:https://stackoverflow.com/a/19591815/4339369。这将允许您以UTF-8的形式读取和写入文件,这可以解决您的问题。

import codecs
import os
import shutil
def concatFiles():
    path = '/Users/user/Desktop/OpinionsTAG_txt/'
    files = os.listdir(path)
    with codecs.open("/Users/user/Desktop/concat_file.txt", "wb",encoding='utf8') as fo:
        for f in files:
            with codecs.open(os.path.join(path, f), "rb",encoding='utf8') as fi:
                shutil.copyfileobj(fi, fo)


if __name__ == "__main__":
    concatFiles()

可以在此处找到Python 2.x中Unicode问题的一个很好的概述:http://nedbatchelder.com/text/unipain.html

将来为任何人编辑:在OS X上,您通常可以通过

确定文件的编码
file -I <filename>

来自How do I determine file encoding in OSX?