目录
⭐️引言
Python是一种流行的编程语言,以其简单性和可读性而闻名。因其能够提供大量的库和模块,它成为了自动化各种任务的绝佳选择。通过使用Python自动化脚本,我们可以提高工作效率、降低人力成本,实现数据的批量处理、网络爬虫和自动化测试等功能。帮助你自动化日常工作中的重复任务,从而节省时间和精力。
⭐️理论
Python主要依赖于第三方库的应用与实现,其中主要使用了os、requests、BeautifulSoup等库的使用。使用这一些库我们可以轻松实现文件管理自动化、文本处理、网页数据自动化等操作。
1、文件管理自动化
自动化文件排序:根据文件扩展名将文件分类到不同的子目录中,以组织文件结构。
import os
import shutil
def sort_files_by_extension(directory):
for filename in os.listdir(directory):
if os.path.isfile(os.path.join(directory, filename)):
extension = filename.split('.')[-1]
new_directory = os.path.join(directory, extension)
if not os.path.exists(new_directory):
os.makedirs(new_directory)
shutil.move(os.path.join(directory, filename), new_directory)
sort_files_by_extension('/path/to/directory')
删除空文件夹:在指定目录中搜索并删除空文件夹,帮助维护文件夹的整洁性。
import os
def remove_empty_dirs(directory):
for root, dirs, files in os.walk(directory, topdown=False):
for dir_name in dirs:
dir_path = os.path.join(root, dir_name)
if not os.listdir(dir_path):
os.rmdir(dir_path)
remove_empty_dirs('/path/to/directory')
批量重命名文件:允许用户根据指定的规则批量重命名目录中的文件。
import os
def batch_rename(directory, prefix):
i = 1
for filename in os.listdir(directory):
if os.path.isfile(os.path.join(directory, filename)):
new_filename = f"{prefix}_{i}{os.path.splitext(filename)[1]}"
os.rename(os.path.join(directory, filename), os.path.join(directory, new_filename))
i += 1
batch_rename('/path/to/directory', 'file')
2、网页数据抓取与自动化
网页数据提取:使用requests和BeautifulSoup等库从网页中提取所需的数据,如文本、图片等。
import requests
from bs4 import BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.prettify()) # 打印解析后的HTML
批量下载图片:从网站批量下载图片,通常通过解析网站提供的图片URL列表实现。
import requests
from bs4 import BeautifulSoup
import os
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
if not os.path.exists('images'):
os.makedirs('images')
for img in soup.find_all('img'):
image_url = img.get('src')
response = requests.get(image_url)
with open(f'images/{image_url.split("/")[-1]}', 'wb') as f:
f.write(response.content)
自动提交表单:使用requests库自动在网站上提交表单,模拟用户操作。
import requests
url = 'https://example.com/form'
data = {'username': 'your_username', 'password': 'your_password'}
response = requests.post(url, data=data)
print(response.status_code) # 检查响应状态码
3. 文本处理与操作
统计文本单词数:读取文本文件并统计其中的单词数量,用于文档分析或字数统计。
def count_words_in_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
text = file.read()
words = text.split()
return len(words)
file_path = '/path/to/text_file.txt'
word_count = count_words_in_file(file_path)
print(f"Word count: {word_count}")
查找和替换文本:在文件中查找特定文本并替换为所需文本,适用于文档编辑和批量修改。
def find_and_replace_in_file(file_path, search_text, replace_text):
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
updated_content = content.replace(search_text, replace_text)
with open(file_path, 'w', encoding='utf-8') as file:
file.write(updated_content)
file_path = '/path/to/text_file.txt'
search_text = 'old_text'
replace_text = 'new_text'
find_and_replace_in_file(file_path, search_text, replace_text)
4、其他自动化脚本
有声读物生成:将PDF文档中的文本转换为音频文件,便于阅读或学习。
from gtts import gTTS
import os
def generate_audio_book(text, output_path):
tts = gTTS(text=text, lang='en')
tts.save(output_path)
text = "This is a sample text."
output_path = '/path/to/audio.mp3'
generate_audio_book(text, output_path)
PDF转CSV:将PDF文件中的表格数据转换为CSV格式,便于数据分析和处理。
import tabula
import pandas as pd
def pdf_to_csv(pdf_path, csv_path):
df = tabula.read_pdf(pdf_path, pages='all')
df.to_csv(csv_path, index=False)
pdf_path = '/path/to/input.pdf'
csv_path = '/path/to/output.csv'
pdf_to_csv(pdf_path, csv_path)
文件加密与解密:使用PyAesCrypt等库对文件进行加密和解密,保护文件安全。
import tabula
import pandas as pd
def pdf_to_csv(pdf_path, csv_path):
df = tabula.read_pdf(pdf_path, pages='all')
df.to_csv(csv_path, index=False)
pdf_path = '/path/to/input.pdf'
csv_path = '/path/to/output.csv'
pdf_to_csv(pdf_path, csv_path)
PDF编辑器:使用Python编辑PDF文件,如解析文本。
import PyPDF2
def extract_text_from_pdf(file_path):
# 打开PDF文件
with open(file_path, 'rb') as file:
pdf_reader = PyPDF2.PdfFileReader(file)
text = ""
# 遍历所有页面,并提取文本
for page_num in range(pdf_reader.numPages):
page = pdf_reader.getPage(page_num)
text += page.extractText()
return text
# 使用示例
file_path = 'path/to/your/file.pdf'
pdf_text = extract_text_from_pdf(file_path)
print(pdf_text)
数据清洗:多个文件数据清洗,其中包括数据类型转换、异常值处理、缺失值处理、重复值处理等。
import os
import pandas as pd
import numpy as np
def clean_data(file_path):
# 加载数据
data = pd.read_csv(file_path)
# 打印原始数据信息
print(f"原始数据信息 ({file_path}):")
print(data.info())
print(data.describe())
# 处理缺失值
data.dropna(inplace=True)
# 或者填充缺失值
# data.fillna(method='ffill', inplace=True) # 使用前向填充方法
# data.fillna(0, inplace=True) # 使用0填充
# 去重
data.drop_duplicates(inplace=True)
# 数据类型转换
for column in data.columns:
if data[column].dtype == 'object':
try:
data[column] = pd.to_numeric(data[column], errors='coerce').fillna(0).astype(int)
except ValueError:
pass
elif data[column].dtype == 'datetime64[ns]':
continue
else:
data[column] = pd.to_numeric(data[column], errors='coerce').fillna(0)
# 异常值处理
numeric_columns = data.select_dtypes(include=[np.number]).columns
for column in numeric_columns:
mean = data[column].mean()
std = data[column].std()
data = data[(data[column] > mean - 3 * std) & (data[column] < mean + 3 * std)]
# 转换日期格式
date_columns = data.select_dtypes(include=['datetime64[ns]']).columns
for column in date_columns:
data[column] = pd.to_datetime(data[column], format='%Y-%m-%d')
return data
def process_files(directory):
# 获取目录中的所有 CSV 文件
csv_files = [f for f in os.listdir(directory) if f.endswith('.csv')]
for file in csv_files:
file_path = os.path.join(directory, file)
cleaned_data = clean_data(file_path)
# 保存清洗后的数据
output_path = os.path.join(directory, f'cleaned_{file}')
cleaned_data.to_csv(output_path, index=False)
print(f"已将清洗后的数据保存至 {output_path}")
# 指定目录路径
directory = 'path/to/your/directory'
# 处理目录中的所有 CSV 文件
process_files(directory)