Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python2和Python3对同一个windows目录的处理方式不同?_Python_Python 2.7_Python 3.x_Unicode - Fatal编程技术网

为什么Python2和Python3对同一个windows目录的处理方式不同?

为什么Python2和Python3对同一个windows目录的处理方式不同?,python,python-2.7,python-3.x,unicode,Python,Python 2.7,Python 3.x,Unicode,我的windows语言是中文。 为了说明我的观点,我使用packagepathlib from pathlib import * rootdir=Path(r'D:\新建文件夹') print(rootdir.exists()) Python2.7I getFalse Python3I获得True 有什么想法吗?谢谢你的建议 对于Python2.7,可以使用“pip install pathlib”安装pathlib。Python2和Python3之间的主要区别在于处理文本和字节的基本类型。在

我的windows语言是中文。 为了说明我的观点,我使用package
pathlib

from pathlib import *
rootdir=Path(r'D:\新建文件夹')
print(rootdir.exists())
Python2.7
I get
False

Python3
I获得
True

有什么想法吗?谢谢你的建议


对于Python2.7,可以使用“
pip install pathlib

安装pathlib。Python2和Python3之间的主要区别在于处理文本和字节的基本类型。在Python3上,我们有一个文本类型:
str
,它保存Unicode数据和两个字节类型
bytes
bytearray

另一方面,在Python2上,我们有两种文本类型:
str
,无论出于何种目的,它都被限制为ASCII+7位范围以上的一些未定义数据,unicode相当于Python3
str
类型和从Python3继承的单字节类型
bytearray

Python 3删除了所有不能从字节转换为Unicode或从字节转换为Unicode的编解码器,并删除了现在无用的字节
.encode()
方法和字符串
.decode()
方法


有关这方面的更多信息,例如,Python 3中的字符串默认为Unicode。在Python 2中,它们是在源文件编码中编码的字节字符串。在Python 2中使用Unicode字符串

还要确保声明源文件编码,并确保源文件保存在该编码中

#coding:utf8
from pathlib import *
rootdir=Path(ur'D:\新建文件夹')
print(rootdir.exists())

对Windows路径使用Unicode文本:在顶部添加来自未来的导入Unicode文本

解释
  • rd:\新建文件夹'
    是Python 2上的ByTestString。它的具体值取决于顶部的编码声明(例如
    #-*-编码:utf-8-*-
    )。如果在Python2中使用非ascii文本,则应该会得到一个没有声明的错误<代码>r'D:\新建文件夹'是Python 3上的Unicode字符串,默认源代码编码为utf-8(不需要编码声明)
  • 如果输入为Unicode,Python在Windows上处理文件时使用Unicode API;如果输入为字节,则使用“ANSI”API

  • 如果源代码编码不同于“ANSI”编码(如cp1252),则结果可能不同:字节按原样传递(相同的字节序列可以在不同的编码中表示不同的字符)。如果文件名不能用“ANSI”编码表示(例如,cp1252——单字节编码不能表示所有Unicode字符——大约有一百万个Unicode字符,但只有256字节);结果可能不同。在Windows上对文件名使用Unicode字符串解决了这两个问题。

    Python 2.7中没有内置的pathlib模块。你能提供吗?另外,请检查
    u'D:\\新建文件夹'作为Python27中的路径。Py2默认的字符串文字类型是
    str
    ,在Py3中是
    unicode
    。我想这是一个字符集问题,因为这在Python2和Python3中是一个很大的不同。我建议Py2中
    u“d:\\xxxx”
    ,然后
    sys.getdefaultencoding()
    开始发挥作用。您不能在Python3上使用
    ur'
    。要获得与Python 2/3兼容的单源代码,我知道。这不是问题所在。