我正在尝试使用Python自动化镗孔的第9章中的第二个练习项目但是即使它打印了预期的字符串,它也没有执行os.unlink(filename)命令,文件不是删除后,它们仍然完好无损。有人能帮忙吗?这是我使用的代码:
#! python3
# deleteUnneeded.py - Searches and deletes files and folders
# to free up space on a computer
import os
# Define a function
def delUnneeded(folder):
folder = os.path.abspath(folder)
# Walk the folder tree with os.walk()
# and search for files and folders of more than 100MB using os.path.getsize()
for foldername, subfolders, filenames in os.walk(folder):
for filename in filenames:
fileSize = os.path.getsize(foldername + '\\' + filename)
if int(fileSize) < 100000000:
continue
os.unlink(filename)
print('Deleting ' + filename + '...')
delUnneeded('C:\\Users\\DELL\\Desktop\\flash')
print('Done')
答案 0 :(得分:0)
这段代码就是问题:
if int(fileSize) < 100000000:
continue
os.unlink(filename)
在你致电os.unlink
之前,你有一个continue
语句,它跳转到循环的下一次迭代。
我认为你的意思是os.unlink
超出条件。只是取消它:
if int(fileSize) < 100000000:
# skip small files
continue
# Otherwise, delete the file
os.unlink(filename)
<强>更新强>
正如上面的评论中所指出的,您还需要构建一个完整的路径:
os.unlink(os.path.join(foldername, filename))
更新2
而不是if ...: continue
,您可以反转条件的逻辑以简化代码。这是我清理过的代码版本:
import os
def del_unneeded(folder):
# Walk the folder tree with os.walk() and search for files of more than
# 100MB using os.path.getsize()
for dirpath, dirnames, filenames in os.walk(folder):
for filename in filenames:
full_path = os.path.join(dirpath, filename)
if os.path.getsize(full_path) > 100000000:
print('Deleting {}...'.format(full_path))
os.unlink(full_path)
del_unneeded('C:\\Users\\DELL\\Desktop\\flash')
print("Done")
其他细微变化:
int(...)
,因为os.path.getsize
已经返回int
。os.walk
产生的组件形成的完整路径。os.walk
文档和Python编码样式(snake_case
而不是camelCase
)。str.format
而不是字符串连接。答案 1 :(得分:0)
这就是我解决此问题的方法,由于该问题仅要求列出大于100MB的文件,因此我们可以跳过删除部分。
#! python3
# delete_files.py - Don't get misled by the program name, hah. This program
# lists the files in a folder tree larger than 100MB and prints them to the screen.
import os
folder = os.path.abspath(input('Please enter folder to search for files larger than 100MB:\n'))
if os.path.isdir(folder) is True:
i = 0 # Placeholder for number of files found larger than 100MB
for foldername, subfolders, filenames in os.walk(folder):
for file in filenames:
abs_path = os.path.abspath(foldername)
full_path = os.path.join(foldername, file)
file_size = os.path.getsize(full_path)
if file_size > 100000000:
i += 1
print(full_path)
print(f'{i} files found larger than 100MB')
else:
print('Folder does not exist.')