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

时间:2017-08-09 10:27:29

标签: python path command-prompt administrator network-drive

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

我以最蟒蛇的方式生成变量myPath我知道如何使用os.path.join
我也尝试使用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)

2 个答案:

答案 0 :(得分:0)

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

这是由Alberto Martinez在SuperUser上的this回答中解释的,但我认为这与其相关并不一定是导致错误的明显原因。

答案 1 :(得分:0)

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

SELECT ROW_NUMBER() OVER (ORDER BY SUM(Quantity) DESC, 
                                   SUM(LineTotalInDefaultCurrency) DESC
                         ) AS row,
       RANK() OVER (ORDER BY SUM(Quantity) DESC, 
                             SUM(LineTotalInDefaultCurrency) DESC
                   ) AS SalesRank,
       p.Name, SUM(Quantity) as UnitsSold ,
       SUM(LineTotalInDefaultCurrency) as RevenueDefaultCurrency,      
       sf.ProductId,   
FROM SalesFact sf INNER JOIN
     Product p
     ON sf.ProductId = p.ProductId 
WHERE Dttm >= '2014-08-08' AND Dttm <= '2017-08-09' 
GROUP BY sf.ProductId, p.Name
ORDER BY [row];