00255 Python 实用自定义便利函数


前言

Python 实用自定义便利函数。

Operating System: Ubuntu 22.04.4 LTS

参考文档

递归删除空文件夹

在Python中,可以使用os模块来递归删除空文件夹。以下是一个示例函数,它会检查每个文件夹,如果文件夹为空,则删除它;如果文件夹中有内容,函数将递归地检查每个子文件夹。

import os
def remove_empty_folders(path, remove_root=True):
    if not os.path.isdir(path):
        return
    # 列出目录中的所有文件和文件夹
    files = os.listdir(path)
    # 递归删除空文件夹
    for file in files:
        full_path = os.path.join(path, file)
        if os.path.isdir(full_path):
            remove_empty_folders(full_path)
    # 列出剩余的文件和文件夹
    files = os.listdir(path)
    # 如果文件夹为空,则删除它
    if len(files) == 0 and remove_root:
        os.rmdir(path)
        print(f"Removed empty folder: {path}")
# 使用示例
path_to_clean = '/path/to/your/folder'  # 替换为你的路径
remove_empty_folders(path_to_clean)

请确保将path_to_clean变量的值替换为你想要清理的文件夹路径。

注意事项

  • 运行此脚本之前,请确保你有足够的权限来删除指定路径中的文件夹。
  • 在生产环境中使用之前,请在一个安全的环境(如虚拟环境或测试目录)中测试此脚本,以确保它按预期工作。
  • 使用remove_root=True时,如果传入的根目录最终为空,它也会被删除。如果你想保留根目录,即使它是空的,可以将remove_root参数设置为False

os.listdir

os.listdir 是 Python 标准库 os 模块中的一个函数,用于列出指定路径下的所有文件和目录名。这个函数返回一个列表,包含了指定路径下的所有条目(文件和子目录)的名字。

以下是 os.listdir 的基本用法:

import os
# 列出当前目录下的所有文件和目录
entries = os.listdir('.')
print(entries)
# 列出指定目录下的所有文件和目录
entries = os.listdir('/path/to/directory')
print(entries)

这里有一些重要的点需要注意:

  • '.' 代表当前目录。
  • '/' 在 Unix-like 系统中是路径分隔符,而在 Windows 中是 '\\'
  • 如果指定的路径不存在,os.listdir 会抛出一个 FileNotFoundError
  • 这个函数不会列出隐藏文件(在 Unix-like 系统中以 . 开头的文件),除非你明确指定列出它们。
  • os.listdir 不会递归地列出子目录中的内容,它只列出直接位于指定路径下的文件和目录。

如果你需要更详细的信息,比如文件属性或大小,你可能需要结合使用 os.stat 或其他相关函数。例如:

import os
# 列出当前目录下所有文件和目录的详细信息
for entry in os.listdir('.'):
    stat_info = os.stat(entry)
    print(f"{entry}: Size = {stat_info.st_size}, Last modified = {stat_info.st_mtime}")

这里,os.stat 用于获取文件的状态信息,st_size 是文件大小,st_mtime 是最后一次修改时间。

复制文件

在Python中,可以使用shutil模块来复制文件。以下是使用shutil模块复制文件的几个常用函数:

  1. shutil.copy(src, dst): 复制文件srcdstdst可以是一个目录,也可以是一个文件名。
  2. shutil.copy2(src, dst): 与copy()类似,但是copy2()还会尝试保留文件的元数据,比如最后访问时间和修改时间。

以下是如何使用这些函数的示例:

import shutil
# 使用 shutil.copy() 复制文件
shutil.copy('source.txt', 'destination.txt')  # 将复制source.txt到destination.txt
# 使用 shutil.copy2() 复制文件,并尝试保留元数据
shutil.copy2('source.txt', 'destination.txt')  # 将复制source.txt到destination.txt,并保留元数据

如果要复制整个目录及其内容,可以使用shutil.copytree(src, dst, symlinks=False, ignore=None)函数。

在使用这些函数时,需要注意的是:

  • 如果目标文件或目录已经存在,将会被覆盖。
  • 使用这些函数时,可能会遇到权限问题或者磁盘空间不足的问题,需要相应的错误处理。
  • 当复制文件时,如果源文件和目标文件在同一个文件系统上,shutil.copy()可能会使用文件系统的链接功能而不是实际复制文件数据,这种行为在某些情况下可以节省时间和空间。

记得在处理文件和目录时,要考虑到异常处理,确保代码的健壮性。例如:

import shutil
import os
try:
    shutil.copy('source.txt', 'destination.txt')
except IOError as e:
    print(f"无法复制文件。错误: {e}")
except:
    print("复制文件时发生意外错误。")

结语

第二百五十五篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录