使用结果

时间:2015-04-28 15:25:09

标签: python windows sftp

我有以下代码片段,只获取文件的时间戳。

files_list = os.listdir(os.path.join(path, folder))
     for files in files_list:
     stats = os.stat(os.path.join(path, folder, files))

我是否有可能得到以下错误,因为它似乎反直觉,它无法找到它刚刚在listdir中找到的文件,除非是因为竞争条件不是我怀疑的情况下。

WindowsError: [Error 2] The system cannot find the file specified:
'\\\\sftp-server.domain.com\\homes\\server\\location\\FOLDER\\FILE.PDF'

我也想知道域查找/临时网络问题是否会导致此错误?例如

\\sftp-server.domain\\homes\\server\\location\\FOLDER  和

\\sftp-server.domain\\homes\\server\\location\\FOLDER\FILE

只是URL字符串,与实际文件系统遍历无关。

2 个答案:

答案 0 :(得分:1)

据推测,FOLDERFILE不是实际名称?仔细查看WindowsError报告的文件名。如果它们在最后一个组件中包含问号,则说明Unicode文件名存在问题。具体来说,当目录包含在当前代码页中无法表示的Unicode字符的文件名(例如西欧或东欧语言环境中的日语字符)时,os.listdir将返回具有不可表示的Unicode字符转换为{{的文件名1}}。显然,这些基本上破碎的名称不能传递给IO函数,例如?open

要解决此问题,请通过将目录作为Unicode字符串传递给os.stat来请求Unicode文件名。这些将包含正确的字符,并可以传递给os.listdir,它将在内部调用广泛的API:

os.stat

答案 1 :(得分:0)

服务器正在进行多线程,我们在一个Javascript方法中将多个Ajax请求发送到同一个文件夹资源。

如果首先处理os.listdir,则会发生此错误,因为它需要很长时间才能通过SFTP执行。在此期间,os.remove发生在另一个请求中,并删除了os.listdir结果中显示的文件。在将os.listdir函数作为正确的回调之后,它工作得很好。