第9章,用Python实践项目自动化无聊的东西:删除不需要的文件

2024-10-02 14:28:32 发布

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

我正在尝试第9章中的第二个实践项目,使用Python自动处理无聊的东西,但是即使它打印出预期的字符串,它也不能执行取消链接操作系统(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')

Tags: andpathinforosfilesfolderfilename
2条回答

这就是我解决这个问题的方法,因为这个问题只要求列出大于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.')

此代码是问题所在:

if int(fileSize) < 100000000:
    continue
    os.unlink(filename)

在调用os.unlink之前,有一个continue语句,它跳到循环的下一个迭代。在

我想你是想让os.unlink超出这个条件。只是没有发现:

^{pr2}$

更新

正如上面的注释所指出的,您还需要构建一个完整的路径:

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而不是字符串连接。在

相关问题 更多 >