Python FileNOtFound Error [WinError3] on Windows Server 2012



我编写了下面的代码,以便能够遍历给定文件路径的所有文件、子文件夹和文件夹。然而,当我运行代码时,它一直给我文件没有发现错误。同样值得一提的是,当我在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),
                                                                  '%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})
        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个字符的路径字符串"。";"表示当前系统代码页的不可见终止空字符。

根据微软网站你的路径太长,确保它少于260个字符。Python的OS模块无法处理大于260个字符的路径。

最新更新