前言
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模块复制文件的几个常用函数:
shutil.copy(src, dst): 复制文件src到dst。dst可以是一个目录,也可以是一个文件名。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("复制文件时发生意外错误。")
结语
第二百五十五篇博文写完,开心!!!!
今天,也是充满希望的一天。