我有一个模拟以下内容的文件结构:
我总是有一个文件夹,该文件夹包含一个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'
我意识到我的代码很垃圾,但我想至少展示我的目标。
答案 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的回答似乎有点整洁了:))