如何在 Mac 上修复 Python 中的 'NotADirectoryError'

How to fix 'NotADirectoryError' in Python on Mac

我正在尝试遍历我计算机上的所有文件并创建一个大于 100MB 的文件列表。但是,在浏览文件时,我不断收到 'NotADirectoryError.' 我理解我的代码的方式,它应该在第二个 for 循环中查找基本文件,所以我不知道为什么 'NotADirectory' 错误不断提高。

我正在 Mac 使用 Python3.7.4。我已经尝试为 'NotADirectoryError' 添加异常,但它只给了我一个 'FileNotFound Error,' 所以我认为在异常时添加异常并不是解决这个问题的最佳方法。

我想我误解了 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/'

这是我在 运行 代码时收到的错误消息。正如我之前所说,我正在尝试遍历所有文件并将较大的文件添加到列表中,但我一直遇到此错误。

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() returns 字节