微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows Server 2012 机器上的 Python FileNOtFound 错误 [WinError3]

如何解决Windows Server 2012 机器上的 Python FileNOtFound 错误 [WinError3]

我编写了以下代码,以便能够遍历给定文件路径的所有文件、子文件夹和文件夹。但是,当我运行代码时,它不断给我找不到文件错误。还值得一提的是,当我在我的 mac 上运行相同的代码时,它给了我同样的错误,但是当我设置 follow_symlink=False 时,错误消失了。

有人可以帮我解决在这里做错的事情吗?

[在此处输入图片说明][1]

from pathlib import Path
import csv
import os
import time
from datetime import datetime

class File:
    def __init__(self,folder_path):
        self.folder_path = Path(folder_path)
   
    def folders(self):
        return [folder for folder in self.folder_path.iterdir() if folder.is_dir()]
   
    def summary(self):
        errors = []
        data_table = []
        folders =  self.folders()
        for folder in folders:
            total=0
            count = 0
            files = folder.glob('**/*')
            for file in files :
                try:
                    total+=(os.stat(file,follow_symlinks=False).st_size)
                    count+=1
                except OSError as e:
                    errors.append(f'Error with file {file} in folder {folder} Error-->{e}')      
                    lm_date = datetime.strftime(datetime.strptime(time.ctime(os.stat(folder).st_mtime),'%a %b %d %H:%M:%s %Y'),'%d-%b-%Y')
                    data_table.append({'Path':folder,'Size in MB':f'{total/1048576}','File Count':count,'Last Modifed Date':lm_date})
            lm_date = datetime.strftime(datetime.strptime(time.ctime(os.stat(folder).st_mtime),'%d-%b-%Y')
            data_table.append({'Path':folder,'Last Modifed Date':lm_date})
        return {'data':data_table,'error':errors}  

    def csv_export(self,file_path):
        data_list =  self.summary()['data']
        headers = data_list[0].keys()
        with open(file_path,'w') as fp:
             writer = csv.DictWriter(fp,headers)
             writer.writeheader()
             try:
                 for data in data_list:
                        writer.writerow(data)
                 print(f'file saved to location: {os.path.join(os.getcwd(),file_path)}')
             except OSError as e:
                print(f'Error exporting data file {e}')

[1]:https://i.stack.imgur.com/0YxQl.jpg 这是我得到的错误

解决方法

旧的 DOS/Win 'subst' 命令可能在这里有所帮助。 通过这种方式,您可以用单个“驱动器号”(加上双冒号)替换“长基本路径”。

>help subst

>subst <drive2:> <drive1:>\<long_base_path>

但是顺便说一句: 你为什么不使用“os.walk()”?这会“遍历”整个给定的根目录:

import os

for dirName,subDirs,fileNames in os.walk('<root_dir>'):
  print('Current directory: ' + dirName)
  for dir in subDirs:
    print('Sub directory in ' + dirName + ': ' + dir)
  for fName in fileNames:
    print('File in ' + dirName + ': '+ fName)
,

在 Windows API 中(以下段落中讨论的一些例外情况除外),路径的最大长度为 MAX_PATH,定义为 260 个字符。本地路径按以下顺序构造:驱动器号、冒号、反斜杠、由反斜杠分隔的名称组件和终止空字符。例如,驱动器 D 上的最大路径是“D:\some 256-character path string”,其中“”表示当前系统代码页的不可见终止空字符。

根据 Microsoft website 您的路径太长,请确保它少于 260 个字符。 Python 的 OS 模块无法处理大于 260 个字符的路径。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。