将 os.walk 的输出写入 *.txt 文件

Write the output of os.walk into *.txt file

我绝对是 python 的新手。我想将每个文件写入 files.txt 文件中的文件夹(python 脚本所在的文件夹)。当我 运行 脚本仅使用 for 循环时,一切正常,我看到文件夹中的每个文件。当我插入 file() 函数以将其写入文件时,我只得到文本文件中的最后一个文件夹。 mz问题出在哪里?

def dir_list():
for root, dirs, files in os.walk(".", topdown=False):
    for name in dirs:
        print(name)
dir_list()

工作正常并打印文件。

现在有了文件():

def dir_list():
for root, dirs, files in os.walk(".", topdown=False):
    for name in dirs:
        file = open("files.txt", "w")
        file.write(name + "\n")
        file.close()

dirlist()

希望你能帮助我。 谢谢

在您的情况下,您将覆盖每个条目的文件。尝试 以下:

def dir_list():
    with open("files.txt", "a") as fp:
        for root, dirs, files in os.walk(".", topdown=False):
            for name in dirs:
                fp.write(name + "\n")

dirlist()

发生这种情况是因为您每次执行循环时都会重新打开文件,并且由于您是在写入模式下打开文件(通过将“w”作为打开函数的参数传递),所以之前的内容文件被覆盖,最后只保存上次迭代写入的内容。

要解决这个问题,您应该在进入循环之前只打开文件一次:

def dir_list():
   with open("files.txt", "a") as fp:
      for root, dirs, files in os.walk(".", topdown=False):
         for name in dirs:
           fp.write(name + "\n")

dirlist()
def dir_list():
for root, dirs, files in os.walk(".", topdown=False):
    for name in dirs:
        file = open("files.txt", "a+")
        print(name + "\n",file=file)
        file.close()

dirlist()

希望这会奏效,这是打印 for 循环的所有输出的一种非常简单的方法。
这里的“a+”意味着你要追加输出 了解我它在您的 python 环境中是否有效