我正在尝试浏览计算机上的所有文件,并创建一个大于100MB的文件列表。但是,在浏览文件时,我不断收到“ NotADirectoryError”。以我理解代码的方式,它应该在第二个for循环中查找基本文件,所以我不知道为什么“ NotADirectory”错误不断出现。
我在使用Python3.7.4的Mac上。我尝试为'NotADirectoryError'添加一个例外,但是它给了我一个'FileNotFound错误',因此我认为在例外上添加例外不是解决此问题的最佳方法。
我认为我误解了os.walk或os.path.getsize的工作原理,但是在查阅了两者的文档后,我仍然对自己的错感到困惑。
big_dict= {}
folder = os.path.abspath('/Users/')
#walking thru all the folders on my computer
for folders, subfolders, filenames in os.walk(folder):
#for each file that's bigger than 100 MB, add it to the 'big_dict'
for filename in filenames:
filename = os.path.join(folder, filename) +'/'
file_size = os.path.getsize(filename) -- this line always gives the error
#convert size to MB, add to big_dict as value with filename key
if file_size > 1000000:
big_dict[filename] = str(file_size/10000) + ' MB'
Traceback (most recent call last):
File "/Users/jonbauer/size_check.py", line 17, in <module>
file_size = os.path.getsize(filename)
File "/Applications/Thonny.app/Contents/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/../../../../../../../Python.framework/Versions/3.7/lib/python3.7/genericpath.py", line 50, in getsize
return os.stat(filename).st_size
NotADirectoryError: [Errno 20] Not a directory: '/Users/.localized/'
这是我在运行代码时收到的错误消息。正如我之前所说,我试图遍历所有文件并将较大的文件添加到列表中,但是我一直遇到此错误。
答案 0 :(得分:1)
big_dict= {}
folder = os.path.abspath('/Users')
for root, _, filenames in os.walk(folder):
for filename in filenames:
path = os.path.join(root, filename)
if os.path.islink(path):
continue
file_size_mb = os.path.getsize(path) >> 20
if file_size_mb > 100:
file_size_mb_str = '{} MB'.format(file_size_mb)
print(path, file_size_mb_str)
big_dict[path] = file_size_mb_str
您的代码中存在几个问题:
filename = os.path.join(folder, filename) +'/'
是不正确的,因为folder
是基础文件夹(在您的情况下是'/ Users /'),而不是您要行走的实际文件夹。getsize()
不会对其起作用file_size > 1000000
:os.path.getsize()返回字节