从 os.listdir(path) 获取 WinError 3 或 UnicodeDecodeError



我意识到这看起来像一个重复的问题,但是我已经检查了我能找到的所有似乎相关的问题,但没有一个能解决我的问题。

我以我知道如何使用os.path.join
的最pythonic的方式生成变量myPath我也尝试使用带有r'path_string'的字符串,甚至使用正斜杠,但是两者都给了我FileNotFoundError: [WinError 3] The system cannot find the path specified

我也尝试使用b'path_string'但这只会给我一个不同的错误,所以这也没有帮助:UnicodeDecodeError: 'utf-8' codec can't decode byte 0x81 in position 69: invalid start byte

所有这些错误都是由我的代码中的同一行生成的:
files = os.listdir(path)

在任何人询问之前,我已经三重检查了共享驱动器的目录路径,它确实存在并且可以访问它。
似乎问题也是由于以管理员身份从命令提示符运行此程序引起的,这确实使这更像是一个学术问题。

完整代码如下,

import os
#myPath = 'z:/Data/App_Projects/Client_Data/Client/Date'
#myPath = b'z:/Data/App_Projects/Client_Data/Client/Date'
myPath = os.path.join("z:", os.sep, "Data", "App_Projects", "Client_Data", "Client", "Date")
files = os.listdir(myPath)

问题似乎来自这是一个网络驱动器的事实。尽管在使用提升的命令提示符时所使用的用户是管理员,但网络驱动器不再与该会话关联,因为它仅针对非提升的会话进行映射。

阿尔贝托·马丁内斯(Alberto Martinez(在超级用户(SuperUser(的回答中对此进行了解释,但我认为它在这里是相关的,因为它不一定是错误的明显原因。

如果您知道网络路径,您仍然可以使用 python 访问网络驱动器文件。

network_path = r"\192.168.0.1" # or \your_network_name
myPath = os.path.join(network_path, "Data", "App_Projects", "Client_Data", "Client", "Date")

最新更新