问题描述
我编写了以下代码,以便能够遍历给定文件路径的所有文件、子文件夹和文件夹。但是,当我运行代码时,它不断给我找不到文件错误。还值得一提的是,当我在我的 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 个字符的路径。