Python 路径名中的编码字符

Python 路径名中的编码字符,python,Python,我使用的是Python版本:2.7.12 | Anaconda 4.1.1 64位|默认值,2016年6月29日,11:07:13[MSC v.1500 64位AMD64]Windows 7 我在脚本中使用lz4,在使用lz4.frame.open读取文件时遇到问题 文件名来自PyQt4的“选择文件”对话框,在调用lz4.frame.open之前,将其转换为unicode,编码为='utf-8' C:/Users/user/Desktop/δθμ/PREVIEW/Questionnaire.db

我使用的是Python版本:2.7.12 | Anaconda 4.1.1 64位|默认值,2016年6月29日,11:07:13[MSC v.1500 64位AMD64]Windows 7

我在脚本中使用lz4,在使用lz4.frame.open读取文件时遇到问题

文件名来自PyQt4的“选择文件”对话框,在调用lz4.frame.open之前,将其转换为unicode,编码为='utf-8'

C:/Users/user/Desktop/δθμ/PREVIEW/Questionnaire.db
<type 'unicode'>
我得到一份工作

    'filename must be a str, bytes, file or PathLike object'
TypeError: filename must be a str, bytes, file or PathLike object
如果代码作为

#fl = fl.encode('utf-8')
 with lz4.frame.open(fl, mode='r') as f:
fl = fl.encode('utf-8')
with lz4.frame.open(fl, mode='r') as f:
我得到一份工作

    self._fp = builtins.open(filename, mode)
IOError: [Errno 2] No such file or directory: 'C:/Users/user/Desktop/\xce\xb4\xce\xb8\xce\xbc/PREVIEW/Questionnaire.db'
错误

有没有办法解决这个问题

编辑1: 这不是复制品。正如我所提到的,filedialog返回的字符串在函数调用之前已使用unicodefl“utf-8”转换为unicode,但在这种情况下,或者在使用“utf-8”将其编码为str之后,它会给出一个错误。您提到的链接中的问题是,对话框返回的字符串没有被当作qstring类型来处理

编辑2: 如果Δθμ更改为拉丁字符,代码将按预期运行

fl = fl.encode('utf-8')
with lz4.frame.open(fl, mode='r') as f:

但是必须处理带有此类字母甚至空格的文件夹。

错误说明:文件名必须是str、字节、文件或类似路径的对象:

if sys.version_info > (3, 6):
    path_test = isinstance(filename, (str, bytes, os.PathLike))
else:
    path_test = isinstance(filename, (str, bytes))
我使用以下代码创建了源文件:

FL = u"δθμ.txt"
DATA = open(r"source.js", "rb").read()
LZ4_DATA = lz4.frame.compress(DATA)

# write compressed data to a file
with open(FL, "wb") as _file:
    _file.write(LZ4_DATA)
然后我给了他一个file object的实例:

# read compressed data from a file
with open(FL, "rb") as _file:
    with lz4.frame.open(_file) as f:
        print(f.read())

它可以工作。

错误消息TypeError:filename必须是str、bytes、file或PathLike对象是Python 3错误,而不是Python 2错误。Python 2中没有定义类os.PathLike,Python 2中也没有区分str和bytes:通过比较str is bytes,您会得到True。@filipe-编码:utf8-–已经存在于我的脚本中,正如我提到的,在调用builtins.open之前,路径已经转换为unicode。因此,我得到一个错误,要么字符串在函数调用中输入为unicode,要么输入为str utf-8编码。@filipe这不是重复的。正如我所提到的,filedialog返回的字符串在函数调用之前已使用unicodefl“utf-8”转换为unicode,但在这种情况下,或者在使用“utf-8”将其编码为str之后,它会给出一个错误。您提到的链接中的问题是,对话框返回的字符串没有被当作qstring类型处理。@BoarGules程序包本身lz4.frame检查文件名是否是str的实例。还要检查python版本以应用其逻辑。错误本身是特定于包的,不是语言错误。UTF-8对您没有帮助。NTFS本机使用UTF-16编码,并且只有ANSI和UTF-16接口。对于openfl,“r”作为_文件:对于lz4.frame.open _文件,mode='r'作为f:print typef self.data=json.loadsf.read,我在f.read部分得到了错误。如果没有,mode='r'部分,我会得到相同的错误。但是,从print typef->它看起来像是打开了文件。我不确定阅读这里后,这是如何处理文件的。菲利佩,我爱你。这是可行的,奇怪的是,对于相应的写文件操作,“wb”必须通过openfl和lz4.frame.open_文件传递,mode='wb'作为f:因为在每个文件中都不起作用。别问我为什么会这样。。。