在Python中迭代目录并删除基于扩展名的文件

2024-04-26 23:41:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模拟以下内容的文件结构: enter image description here

我总是有一个文件夹,那个文件夹包含一个EXCEL文件夹和一堆文本文档。每个EXCEL文件夹都有一堆.xlsx文件。在

同样的想法可以在相同的结构下被无限次地复制。我试图进入每个目录的每个EXCEL文件夹,删除扩展名为.xlsx的所有文件,并继续此过程,直到访问完所有的EXCEL文件夹。在

以下是我失败的一点代码:

def clean_out_excel_test_data():
    #For each folder in the test_log directory
        #Open each folder
            #for each_folder that contains the word EXCEL
                #open each_folder
                    #for each file in each_folder, remove it

    log_directory = "test_log_data/"

    for each_folder in sorted(os.listdir(log_directory)):
        print each_folder + ' is in the root'
        for each_folder2 in sorted(os.listdir('%s/%s'%(log_directory,each_folder))) if os.path.isdir(each_folder2):
            print '\t-' + each_folder2 + ' is a sub-folder'
            for each_excel_file in sorted(os.listdir('%s/%s/%s'%(log_directory,each_folder, each_folder2))):
                print '\t\t-' + each_excel_file + ' is a sub excel file'

我意识到我的代码是垃圾,但我想至少展示我的目标。在


Tags: 文件theintest文件夹logforos
3条回答

^{}为您处理目录遍历:

for root, dirs, files in os.walk('/path/to/test_log_data'):
    if 'EXCEL' not in root:
        continue
    for fname in files:
        if fname.endswith('.xlsx'):
            os.remove(os.path.join(root, fname))

您的语法错误来自于此:

for each_folder in sorted(os.listdir(log_directory)):
    print each_folder + ' is in the root' 
    for each_folder2 in sorted(os.listdir('%s/%s'%(log_directory,each_folder))) if os.path.isdir(each_folder2):
        print '\t-' + each_folder2 + ' is a sub-folder' #                       ^ Here
        for each_excel_file in sorted(os.listdir('%s/%s/%s'%(log_directory,each_folder, each_folder2))):
            print '\t\t-' + each_excel_file + ' is a sub excel file'

您试图在for循环中使用if语句,但不能这样做。只需将if移到另一个块中:

^{pr2}$

这仍然是一个混乱的代码,这无疑是一个更好的方法,但这应该可以消除您当前的错误。在

不过,史蒂文·伦巴尔斯基的回答似乎更简洁一些:)

我会用^{}。在

你可以这样做:

for root, dirs, files in os.walk(YOUR_BASE_DIR):
    for f in files:
        if f.endswith(".xlsx"):
            os.remove(os.path.join(root, f))

上面的操作将删除所有xlsx文件,而不管它们在哪个子目录中。应该很容易修改它来筛选目录名。在

如果您想使用listdir(),我建议递归遍历一个目录,将所有文件添加到队列中,然后迭代该目录并删除相应的文件。在

相关问题 更多 >