chdir在Python中修改路径

时间:2017-05-31 02:00:01

标签: python utf-8 chdir

我有一个程序从文件中读取带有特殊字符(用西班牙语)的字符串。然后我使用chdir更改为其名称为字符串的目录。

例如,在名为“names.txt”的文件中,我得到了以下内容

Tableta  
Música
.
.
etc

该文件以utf-8编码,以便我从python中读取它,如下所示

f=open("names.txt","r",encoding="utf-8")
names=f.readlines()
f.close()

它确实成功读取了

print(names)

输出:

['Tableta\n','Música\n', ...etc]

当我想要更改到第一个目录(第一个名称'Tableta',没有换行符)时出现问题

chdir(names[0][:-1])

我收到以下错误

  

FileNotFoundError:[WinError 2]系统找不到指定的文件:“\ ufeffTableta”

它只会发生在名字上,这对我来说非常奇怪。使用其他名称,它可以更改目录,无论它们是否具有特殊字符

我认为它必须对编码做一些事情,因为'\ ufeff'额外添加了字符。所以我将“names.txt”文件更改为ANSI编码并删除了所有特殊字符,以便我可以用python读取它,并且它有效。但事实是我需要在utf-8编码中使用该文件,以便我可以读取特殊字符。有什么办法可以解决这个问题吗?为什么python将'\ ufeff'字符添加到字符串中并且仅使用名字?

2 个答案:

答案 0 :(得分:1)

您的文件" names.txt"有一个字节顺序掩码(BOM)。要删除它,请使用以下解码器打开文件:

f = open("names.txt", encoding="utf-8-sig")

作为旁注,删除文件名更安全:names[0].strip()而不是names[0][:-1]

答案 1 :(得分:0)

文件的开头有unicode BOM。在阅读文件时跳过第一个字符或使用utf-8-sig编码打开它。