忽视 。 os.walk 中的(点)目录

Ignore . (dot) directories in os.walk

正在学习 python 我正在研究一个通用的实用程序脚本来递归下面的任何目录并将文件名和其他属性放入文件中 - 现在 Windows。我一直收到如下错误,我不关心这些文件,这些文件到目前为止似乎在 "dot directories" 中找到。手动列出目录到 directories.remove() 很有趣,但我需要更好的方法。我不知道如何告诉它忽略所有点目录。

    file_size = os.path.getsize(filename)
  File "C:\Program Files\Python37\lib\genericpath.py", line 50, in getsize
    return os.stat(filename).st_size
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'COMMIT_EDITMSG'

我在这

import os
import time

# pip install --user hurry.filesize
from hurry.filesize import size

path = "./"

for root, directories, filenames in os.walk(path):
    if ".*" in directories:
        directories.remove(".*")

    for filename in filenames:
        file_path = os.path.join(root, filename)
        file_size = os.path.getsize(filename)
        better_changetime = time.strftime(
            "%Y-%m-%d %H:%M:%S", time.gmtime(os.path.getmtime(filename))
        )
        fprops = file_path + " | " + better_changetime + " | " + size(file_size)
        print(fprops)

in 运算符或 .remove() 方法不处理文件名模式。您可以使用 filter() 函数删除与模式匹配的名称。

directories = filter(lambda name: not name.startswith("."), function)

但您以后再也不会使用 directories,所以我不确定这样做的意义何在。从此列表中删除目录不会从 filenames 列表中删除其中的文件。

错误是因为您在调用 os.path.getsize()os.path.getmtime().

时使用的是 filename 而不是 file_path