Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将不同扩展名的文件名写入不同的文本文件_Python_File Handling_Os.walk - Fatal编程技术网

Python 将不同扩展名的文件名写入不同的文本文件

Python 将不同扩展名的文件名写入不同的文本文件,python,file-handling,os.walk,Python,File Handling,Os.walk,我正在尝试这个代码。如何将扩展名为ex.doc的系统中的所有文件写入桌面中名为all_docs.txt的文件?for循环内的file.write()只将每个扩展名的最后一行写入文件。您需要以追加模式(a)而不是写入模式(w)打开日志文件,因为使用w时,文件在写入任何新内容之前会被截断(所有内容都被删除) 您可以查看的文档。还概述了所有文件模式 它与a一起工作吗?您需要以附加模式(a)而不是写入模式(w)打开日志文件,因为在写入任何新内容之前,使用w会截断文件(删除所有内容) import os

我正在尝试这个代码。如何将扩展名为ex.doc的系统中的所有文件写入桌面中名为all_docs.txt的文件?for循环内的file.write()只将每个扩展名的最后一行写入文件。

您需要以追加模式(
a
)而不是写入模式(
w
)打开日志文件,因为使用
w
时,文件在写入任何新内容之前会被截断(所有内容都被删除)

您可以查看的文档。还概述了所有文件模式


它与
a
一起工作吗?

您需要以附加模式(
a
)而不是写入模式(
w
)打开日志文件,因为在写入任何新内容之前,使用
w
会截断文件(删除所有内容)

import os

exts = ['ppt', 'pptx', 'doc', 'docx', 'txt', 'pdf', 'epub']
files = []

for root, dirnames, filenames in os.walk('.'):
    for i in exts:
        for file in filenames:
            if file.endswith(i):
                file1 = os.path.join(root, file)
                print(file1)
                with open(os.getcwd()+ r"\ally_"+i+".txt", 'w+') as f:
                    f.write("%s\n" % file1)
您可以查看的文档。还概述了所有文件模式

它是否适用于
a

import os

exts = ['ppt', 'pptx', 'doc', 'docx', 'txt', 'pdf', 'epub']
files = []

for root, dirnames, filenames in os.walk('.'):
    for i in exts:
        for file in filenames:
            if file.endswith(i):
                file1 = os.path.join(root, file)
                print(file1)
                with open(os.getcwd()+ r"\ally_"+i+".txt", 'w+') as f:
                    f.write("%s\n" % file1)
根据“w+”操作截断文件

模式“r+”、“w+”和“a+”打开文件进行更新(读写)请注意,“w+”会截断文件

根据“w+”操作截断文件

模式“r+”、“w+”和“a+”打开文件进行更新(读写)请注意,“w+”会截断文件


open
的模式
w+
会导致截断文件,这是丢失行的原因,只有最后一行会留在那里。 另一个小问题是,这种连接路径和文件名的方法不可移植。为此,您应该使用user
os.path.join

with open(os.getcwd()+ r"\ally_"+i+".txt", 'w+') as f:
    f.write("%s\n" % file1)
另一个问题可能是在有许多目录和文件的情况下,您的周性能。 在您的代码中,您运行每个扩展名的目录中的文件名,并一次又一次地打开输出文件。 还有一个问题是检查扩展。在大多数情况下,可以通过检查文件名的结尾来确定扩展名,但有时会产生误导。例如,
'.doc'
是一个扩展名,但是在文件名
'Medoc'
中,一个名称的结尾
'doc'
只有3个字母。 因此,我给出了这些问题的示例解决方案:

            with open(os.path.join(os.getcwd(),"ally_"+i+".txt"), 'a') as f:
                f.write("%s\n" % file1)

open
的模式
w+
会导致截断文件,这是丢失行的原因,只有最后一行会留在那里。 另一个小问题是,这种连接路径和文件名的方法不可移植。为此,您应该使用user
os.path.join

with open(os.getcwd()+ r"\ally_"+i+".txt", 'w+') as f:
    f.write("%s\n" % file1)
另一个问题可能是在有许多目录和文件的情况下,您的周性能。 在您的代码中,您运行每个扩展名的目录中的文件名,并一次又一次地打开输出文件。 还有一个问题是检查扩展。在大多数情况下,可以通过检查文件名的结尾来确定扩展名,但有时会产生误导。例如,
'.doc'
是一个扩展名,但是在文件名
'Medoc'
中,一个名称的结尾
'doc'
只有3个字母。 因此,我给出了这些问题的示例解决方案:

            with open(os.path.join(os.getcwd(),"ally_"+i+".txt"), 'a') as f:
                f.write("%s\n" % file1)

请重新格式化您的代码什么东西不起作用?有问题吗?ally_doc.txt文件中的输出仅包含1个文件名。但我希望我的.doc扩展名系统中的所有文件都写入ally_doc.txt。我应该如何处理这个问题?我认为您需要以“a”(追加)模式打开文件是的。“a”模式有效!!非常感谢:)请重新格式化您的代码什么东西不起作用?有问题吗?ally_doc.txt文件中的输出仅包含1个文件名。但我希望我的.doc扩展名系统中的所有文件都写入ally_doc.txt。我应该如何处理这个问题?我认为您需要以“a”(追加)模式打开文件是的。“a”模式有效!!非常感谢:)对!你将如何处理这个问题?这肯定会有帮助的。我已经编辑了答案以包含我的建议。对!你将如何处理这个问题?这肯定会有帮助的。我对答案进行了编辑,以包含我的建议。