我的Windows语言是中文。
为了说明我的观点,我使用了包pathlib
。
from pathlib import *
rootdir=Path(r'D:\新建文件夹')
print(rootdir.exists())
Python2.7
我得到False
Python3
我得到True
有什么想法吗?感谢您的任何建议。
对于Python2.7,您可以使用" pip install pathlib
"
答案 0 :(得分:1)
在Python 3中,字符串默认为Unicode。在Python 2中,它们是以源文件编码编码的字节字符串。在Python 2中使用Unicode字符串。
还要确保声明源文件编码并确保源以该编码保存。
#coding:utf8
from pathlib import *
rootdir=Path(ur'D:\新建文件夹')
print(rootdir.exists())
答案 1 :(得分:0)
Python 2和Python 3之间的主要区别在于处理文本和字节的基本类型。在Python 3上,我们有一种文本类型:str
,它包含Unicode数据和两种字节类型bytes
和bytearray
。
另一方面,在Python 2上,我们有两种文本类型:str
,对于所有意图和目的,仅限于ASCII + 7位范围以上的一些未定义数据,unicode等同于Python 3 { {1}}类型和从Python 3继承的一个字节类型str
。
Python 3删除了所有不会从字节转到Unicode的编解码器,反之亦然,删除了现在无用的bytearray
方法和字符串.encode()
方法。
更多关于此事here
答案 2 :(得分:0)
对Windows路径使用Unicode文字:在顶部添加r'D:\新建文件夹'
。
# -*- coding: utf-8 -*-
是Python 2上的字节串。它的特定值取决于顶部的编码声明(例如r'D:\新建文件夹'
)。如果在Python 2中使用非ascii文字,则应该在没有声明的情况下得到错误。{{1}}是Python 3上的Unicode字符串,默认源代码编码是utf-8(不需要编码声明)如果源代码编码不同于" ANSI"编码(如cp1252)则结果可能不同:字节按原样传递(相同的字节序列可以表示不同编码中的不同字符)。如果文件名不能用" ANSI"表示。编码(例如,cp1252 - 单字节编码不能代表所有Unicode字符 - 大约有一百万个Unicode字符,但只有256个字节);结果可能不同。在Windows上使用Unicode字符串作为文件名修复了这两个问题。