从路径生成python打开文件

时间:2014-10-07 13:18:25

标签: python unicode utf-8 character-encoding byte-order-mark

我是从csv文件信息构建路径文件但是在打开文件错误

No such file or directory: 'C:\\New folder\\a\\\xef\xbb\xbf90305.xlsx'

当我打印文件名显示

C:\New folder\a\90305.xlsx

请帮助

 with open (r'C:\New folder\li.csv','rb')as csvfile:
            spamreader=csv.reader(csvfile,delimiter=',')
            for row in spamreader:
                filename = r'C:\New folder\a'
                suffix='.xlsx'
                filename=os.path.join(filename,row[0]+suffix)
                with open(filename,"rb")as fo:
                    print fo

2 个答案:

答案 0 :(得分:0)

文件名前缀row[0]UTF-8编码的,以Unicode byte order mark (BOM)开头。

您可以使用以下内容decode

prefix = row[0].decode('utf-8-sig')
filename = os.path.join(filename, prefix + suffix)

要阅读有关编码的更多信息,请参阅手册中的7.8.2. Encodings and Unicode

答案 1 :(得分:0)

看起来有一些编码问题正在发生。 CSV文件中的数据已编码,因此请使用codecs模块(Python 2)打开文件,或在打开文件时指定编码(Python 3)。假设使用UTF8编码,并使用utf-8-sig编解码器来处理文件开头的任何字节顺序标记(BOM):

Python 2

import codecs

with codecs.open(r'C:\New folder\li.csv','rb', encoding='utf-8-sig') as csvfile:
    etc.

Python 3

with open(r'C:\New folder\li.csv','rb', encoding='utf-8-sig') as csvfile:
    etc.

这假设只有一个UTF8 BOM并且它出现在文件的开头,而不是文件中的随机点。你正在使用Windows,所以这不是一个错误的假设。