Python os.walk 只查找系统文件

问题描述 投票:0回答:1

我试图让 os.walk 将 C 驱动器中每个文件的文件路径写入另一个驱动器中的文本文件,它只找到一堆普通 Windows 用户甚至看不到的内部 Windows 文件,例如C:ar-SA/fms.dll.mui, C:CatRoot/{F750E6C3-38EE-11D1-85E5-00C04FC295EE}/Containers-ApplicationGuard-Package~31bf3856ad364e35~amd64~en-GB~10.0.19041.1826.cat

logfile=open("Z:allfileslog.txt","w")
for dirname, dirs, files in os.walk("C:"):
    for filename in files:
        logfile.write(os.path.join(dirname,filename)+'\n')
logfile.close()

我注意到虽然它似乎没有看到 C:/Users,但如果我实际使用 os.walk("C:/Users") 运行它,它识别其中的文件和子文件夹。此外,如果我说

logfile=open("Z:allfileslog.txt","w")
for dirname, dirs, files in os.walk("C:"):
    print(dirs)
    for filename in files:
        logfile.write(os.path.join(dirname,filename)+'\n')
logfile.close()

看到用户文件夹,在

dirs
变量包含的大量数组中的某个地方,但是,我不知道如何利用它来找到我想要的实际文件。 (请注意,我do希望将这些系统文件输出到我的文本文件,但我也希望它也能找到普通文件)

我不认为这是 C 驱动器权限的问题,因为 1. 如果我的计算机想要拒绝我的权限,系统文件将是我的计算机让我查看的最后一个文件 2. 我已经能够写入特定文件,例如我放入下载文件夹并直接为 open() 函数提供路径的文本文件。

为什么它看不到其他目录和文件?

python file-io
1个回答
0
投票

旧的 Windows“C:”与“C:/”陷阱

当您对 Windows 说“C:”时,它会解释为 C 盘上当前选择的 目录。这恰好是一些内部文件夹。我们知道这是因为它包含“ar-SA”(沙特阿拉伯阿拉伯语的语言标识符)和“CatRoot”(通常位于“C:\Windows\System32”中的文件夹)的直接子文件。

具体表示C盘的root,必须加斜杠。 (正斜线或反斜线,取决于你在哪里写)。

试试这个


logfile=open("Z:allfileslog.txt","w")
for dirname, dirs, files in os.walk("C:/"):
    for filename in files:
        logfile.write(os.path.join(dirname,filename)+'\n')
logfile.close()

当你在Z:盘上的最后一个位置已经是正确的文件夹时,写入“Z:allfileslog.txt”成功。

但是,如果您真的特指 Z 驱动器的根目录,您应该养成这样称呼它的好习惯:

logfile=open("Z:/allfileslog.txt","w")

这将帮助您记住在其他情况下,例如 C 盘,您当前的位置在用户目录中而不是 C:/

© www.soinside.com 2019 - 2024. All rights reserved.