引言
在日常工作中,我们经常需要处理大量的文件操作,如重命名、搜索、同步等。通过编写自动化脚本,不仅可以提高效率,还能减少错误。本文将介绍几个常用的文件操作脚本,包括文件重命名、搜索、同步、压缩、解压以及日志监控。
1. 文件重命名脚本
在处理大量文件时,手动重命名不仅耗时还容易出错。下面是一个使用 Python 编写的文件批量重命名脚本。
import os
def rename_files
(directory, prefix="new_")
:
"""
批量重命名指定目录下的所有文件。
:param directory: 要处理的文件夹路径
:param prefix: 新文件名前缀,默认为 "new_"
"""
# 获取指定目录下所有文件名
files = os.listdir(directory)
for index, file in enumerate(files):
# 获取文件扩展名
extension = os.path.splitext(file)[1]
# 构建新文件名
new_name =
f"{prefix}{index}{extension}"
# 拼接完整路径
old_path = os.path.join(directory, file)
new_path = os.path.join(directory, new_name)
# 重命名文件
os.rename(old_path, new_path)
print(
f"Renamed {file} to {new_name}"
)
# 使用示例
rename_files("/path/to/your/directory")
输出示例:
Renamed old_file1.txt to new_0.txt
Renamed old_file2.jpg to new_1.jpg
...
代码解析:
os.listdir()
返回指定目录下的所有文件和子目录名。
os.path.splitext()
分离文件名与扩展名。
os.path.join()
拼接路径。
os.rename()
用于重命名文件。
2. 文件搜索脚本
在文件系统中查找特定文件是常见的需求。此脚本可以在指定目录及其子目录中搜索包含特定字符串的文件。
import os
def search_files(directory, keyword):
"""
在指定目录及其子目录中搜索包含特定字符串的文件。
:param directory: 要搜索的目录
:param keyword: 关键词
"""
for root, dirs, files in os.walk(directory):
for file in files:
if keyword in file:
print(os.path.join(root, file))
# 使用示例
search_files("/path/to/your/directory", "example")
输出示例:
/path/to/your/directory/subdir/example.txt
/path/to/your/directory/subdir/another_example.docx
...
代码解析:
os.walk()
遍历指定目录树中的文件名。
root
是当前目录路径。
dirs
是该目录下的子目录列表。
files
是该目录下的文件列表。
3. 目录同步脚本
同步两个目录的内容,在备份或部署场景中非常有用。下面这个脚本可以将源目录中的所有文件复制到目标目录中。
import shutil
import os
def sync_directories(src, dst):
"""
同步两个目录的内容。
:param src: 源目录
:param dst: 目标目录
"""
# 创建目标目录(如果不存在)
if not os.path.exists(dst):
os.makedirs(dst)
# 复制文件
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
if os.path.isdir(s):
sync_directories(s, d)
else:
shutil.copy2(s, d)
print(
f"Copied {s} to {d}"
)
# 使用示例
sync_directories("/path/to/source", "/path/to/destination")
输出示例:
Copied /path/to/source/file1.txt to /path/to/destination/file1.txt
Copied /path/to/source/subdir/file2.txt to /path/to/destination/subdir/file2.txt
...
代码解析:
shutil.copy2()
复制文件并保留元数据。
使用递归调用来处理子目录。
4. 文件压缩脚本
在传输或存储大文件时,压缩文件可以显著节省空间和时间。以下脚本可以将指定目录下的所有文件压缩成一个
.zip
文件。
import zipfile
import os
def compress_directory(directory, output_zip):
"""
将指定目录下的所有文件压缩成一个 .zip 文件。
:param directory: 要压缩的目录
:param output_zip: 输出的 .zip 文件路径
"""
with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
for root, dirs, files in os.walk(directory):
for file in files:
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, directory)
zipf.write(file_path, arcname=arcname)
print(
f"Added {file_path} to {output_zip}"
)
# 使用示例
compress_directory("/path/to/your/directory", "/path/to/output.zip")
输出示例:
Added /path/to/your/directory/file1.txt to /path/to/output.zip
Added /path/to/your/directory/subdir/file2.txt to /path/to/output.zip
...
代码解析:
zipfile.ZipFile()
创建一个新的
.zip
文件对象。
write()
方法将文件添加到
.zip
文件中。
os.path.relpath()
计算相对路径。
5. 文件解压脚本
与压缩脚本相对应,解压脚本可以将压缩文件还原成原始文件结构。以下脚本可以解压指定的
.zip
文件到指定目录。
import zipfile
import os
def extract_zip(zip_file, output_directory):
"""
解压指定的 .zip 文件到指定目录。
:param zip_file: 要解压的 .zip 文件路径
:param output_directory: 输出目录
"""
with zipfile.ZipFile(zip_file, 'r') as zipf:
zipf.extractall(output_directory)
print(
f"Extracted all files from {zip_file} to {output_directory}"
)
# 使用示例
extract_zip("/path/to/input.zip", "/path/to/output_directory")
输出示例:
Extracted all files from /path/to/input.zip to /path/to/output_directory
代码解析:
extractall()
方法将
.zip
文件中的所有文件解压到指定目录。
os.path.join()
拼接路径。
6. 日志监控脚本
对于服务器管理和运维来说,实时监控日志文件非常重要。以下脚本可以实时监控指定的日志文件,并在控制台打印新增的内容。
import time
def monitor_log_file(log_file):
"""
实时监控指定的日志文件,并在控制台打印新增的内容。
:param log_file: 要监控的日志文件路径
"""
with open(log_file, 'r') as file:
file.seek(0, 2) # 移动到文件末尾
while True:
line = file.readline()
if not line:
time.sleep(1) # 没有新行则等待
continue
print(line.strip())
# 使用示例
monitor_log_file("/path/to/logfile.log")
输出示例:
阅读:sfangba.com/184.html阅读:sfangba.com/183.html阅读:sfangba.com/182.html阅读:sfangba.com/179.html阅读:sfangba.com/178.html阅读:sfangba.com/177.html阅读:sfangba.com/176.html阅读:sfangba.com/175.html阅读:sfangba.com/174.html阅读:sfangba.com/173.html阅读:sfangba.com/172.html阅读:sfangba.com/171.html
2023-10-01 12:00:00 - INFO - Some message
2023-10-01 12:00:01 - ERROR - An error occurred
...
代码解析:
file.seek(0, 2)
将文件指针移动到文件末尾。
readline()
读取一行。
time.sleep(1)
暂停一秒以减少 CPU 占用。
总结
本文介绍了六个实用的文件操作脚本,包括文件重命名、文件搜索、目录同步、文件压缩与解压以及日志监控。这些脚本能够帮助我们高效地处理文件系统中的常见任务,提高工作效率。通过自动化这些任务,我们可以更加专注于核心业务逻辑。