迭代目录并根据Python中的扩展删除文件

时间:2015-07-07 17:40:58

标签: 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'

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

3 个答案:

答案 0 :(得分:4)

os.walk为您处理目录遍历:

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))

答案 1 :(得分:2)

我会使用os.walk()

你可以做点什么:

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(),我建议递归地遍历目录,将所有文件添加到队列中,然后迭代它并删除相应的文件。

答案 2 :(得分:0)

您的语法错误来自此处:

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移动到另一个块中:

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'

它仍然是凌乱的代码,毫无疑问可以做得更好,但这应该摆脱你当前的错误。

Steven Rumbalski的回答似乎有点整洁了:))