Python解放雙手的15個(gè)超實(shí)用的自動(dòng)化辦公腳本(附代碼)
引言:告別重復(fù),擁抱效率!
在日常工作中,你是否曾被那些枯燥、重復(fù)、耗時(shí)的數(shù)據(jù)處理、文件整理或信息錄入任務(wù)所困擾?想象一下,如果有一個(gè)“智能助手”能夠幫你自動(dòng)完成這些繁瑣的工作,那該有多棒!
好消息是,這個(gè)“智能助手”就是Python!Python以其簡(jiǎn)潔的語(yǔ)法和強(qiáng)大的庫(kù)生態(tài),成為了自動(dòng)化辦公領(lǐng)域的利器。無(wú)論你是數(shù)據(jù)分析師、行政人員、市場(chǎng)營(yíng)銷(xiāo),還是任何需要處理大量文件的職場(chǎng)人,掌握一些Python自動(dòng)化腳本都能極大地提升你的工作效率,讓你有更多時(shí)間專(zhuān)注于創(chuàng)造性和戰(zhàn)略性工作。
本篇博客將為你精心挑選并詳細(xì)講解15個(gè)超實(shí)用的Python自動(dòng)化辦公腳本,涵蓋文件操作、文本處理、Excel/CSV數(shù)據(jù)處理、圖片操作等多個(gè)方面。即使你是編程小白,也能跟著我們的教程一步步操作,親手體驗(yàn)Python帶來(lái)的效率革命!
準(zhǔn)備好了嗎?讓我們一起用Python解放雙手,告別重復(fù)勞動(dòng),邁向高效辦公的新時(shí)代!
準(zhǔn)備工作:搭建你的Python自動(dòng)化環(huán)境
在開(kāi)始編寫(xiě)腳本之前,我們需要先搭建好Python的運(yùn)行環(huán)境。別擔(dān)心,這比你想象的要簡(jiǎn)單!
1. 安裝Python解釋器
- 下載Python
- 選擇版本: 建議下載最新穩(wěn)定版本(如Python 3.9+)。
- 安裝: 運(yùn)行下載的安裝包。特別注意:在安裝過(guò)程中,務(wù)必勾選“Add Python to PATH”選項(xiàng),這將使你能夠在命令行中直接運(yùn)行Python。
- 驗(yàn)證安裝: 打開(kāi)命令行(Windows按
Win+R,輸入cmd回車(chē);macOS/Linux打開(kāi)終端),輸入python --version或python3 --version,如果顯示Python版本號(hào),則說(shuō)明安裝成功。
2. 安裝代碼編輯器(推薦VS Code)
雖然任何文本編輯器都可以編寫(xiě)Python代碼,但專(zhuān)業(yè)的代碼編輯器能提供語(yǔ)法高亮、代碼補(bǔ)全、調(diào)試等功能,極大地提升開(kāi)發(fā)體驗(yàn)。
- 下載VS Code
- 安裝: 按照指引安裝即可。
- 安裝Python擴(kuò)展: 打開(kāi)VS Code,在側(cè)邊欄點(diǎn)擊“擴(kuò)展”圖標(biāo)(或按
Ctrl+Shift+X),搜索“Python”并安裝由Microsoft提供的擴(kuò)展。
3. 安裝必要的Python庫(kù)
Python的強(qiáng)大之處在于其豐富的第三方庫(kù)。我們將使用pip(Python的包管理器)來(lái)安裝這些庫(kù)。
打開(kāi)命令行/終端。
逐一安裝以下庫(kù)(有些腳本可能只用到其中一部分,但為了方便,我們一次性安裝):
pip install pandas openpyxl PyPDF2 Pillow pyperclip requests beautifulsoup4 schedule
pandas: 處理Excel和CSV文件的利器。openpyxl: pandas處理xlsx格式文件需要依賴(lài)它。PyPDF2: 用于PDF文件的讀寫(xiě)操作。Pillow: 強(qiáng)大的圖像處理庫(kù)。pyperclip: 方便地操作剪貼板。requests: 用于發(fā)送HTTP請(qǐng)求,抓取網(wǎng)頁(yè)內(nèi)容。beautifulsoup4: 用于解析HTML/XML文檔,提取數(shù)據(jù)。schedule: 用于定時(shí)任務(wù)。
實(shí)戰(zhàn)腳本詳解:15個(gè)超實(shí)用的自動(dòng)化辦公腳本
下面,我們將逐一介紹這15個(gè)腳本。每個(gè)腳本都包含詳細(xì)的代碼、用途說(shuō)明和使用方法,請(qǐng)跟著步驟親手實(shí)踐!
重要提示:
- 文件路徑: 在Windows系統(tǒng)中,路徑通常使用反斜杠
\(如C:\Users\YourName\Desktop)。在Python字符串中,反斜杠是轉(zhuǎn)義字符,所以你需要使用雙反斜杠\\(如C:\\Users\\YourName\\Desktop),或者使用原始字符串r'C:\Users\YourName\Desktop'。更推薦的做法是使用正斜杠/,Python在所有操作系統(tǒng)上都能很好地處理它 (如C:/Users/YourName/Desktop)。 - 代碼保存: 將每個(gè)腳本的代碼保存為一個(gè)
.py文件(例如rename_files.py)。 - 運(yùn)行腳本: 在命令行/終端中,導(dǎo)航到你保存腳本的文件夾,然后運(yùn)行
python your_script_name.py。
1. 批量重命名文件
這個(gè)腳本可以幫助你快速、批量地重命名一個(gè)文件夾內(nèi)的所有文件,例如添加前綴、后綴或替換部分文件名。
- 用途: 整理照片、文檔、下載文件時(shí)非常有用。
- 所需庫(kù):
os(Python內(nèi)置庫(kù))
import os
def batch_rename_files(folder_path, old_str, new_str):
"""
批量重命名指定文件夾下的文件。
:param folder_path: 文件夾路徑
:param old_str: 文件名中需要被替換的舊字符串
:param new_str: 替換舊字符串的新字符串
"""
try:
for filename in os.listdir(folder_path):
if old_str in filename:
new_filename = filename.replace(old_str, new_str)
old_file_path = os.path.join(folder_path, filename)
new_file_path = os.path.join(folder_path, new_filename)
os.rename(old_file_path, new_file_path)
print(f"文件 '{filename}' 已重命名為 '{new_filename}'")
print("所有文件重命名完成!")
except Exception as e:
print(f"發(fā)生錯(cuò)誤: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的文件夾路徑、舊字符串和新字符串
folder = "D:/MyDocuments/Photos" # 示例路徑
old_text = "IMG_"
new_text = "Vacation_"
batch_rename_files(folder, old_text, new_text)
# 示例2: 添加前綴
# folder = "D:/MyDocuments/Reports"
# old_text = "" # 空字符串表示添加前綴
# new_text = "Final_"
# batch_rename_files(folder, old_text, new_text)
使用方法:
- 將代碼保存為
rename_files.py。 - 修改
folder變量為你需要操作的文件夾路徑。 - 修改
old_text和new_text為你想要替換的字符串。 - 運(yùn)行
python rename_files.py。
2. 按文件類(lèi)型整理文件
這個(gè)腳本能自動(dòng)識(shí)別文件類(lèi)型(通過(guò)擴(kuò)展名),并將它們移動(dòng)到對(duì)應(yīng)的子文件夾中,讓你的文件夾井井有條。
- 用途: 桌面文件清理、下載文件夾整理。
- 所需庫(kù):
os,shutil(Python內(nèi)置庫(kù))
import os
import shutil
def organize_files_by_type(folder_path):
"""
根據(jù)文件類(lèi)型(擴(kuò)展名)將文件移動(dòng)到對(duì)應(yīng)的子文件夾中。
:param folder_path: 需要整理的文件夾路徑
"""
try:
for filename in os.listdir(folder_path):
file_path = os.path.join(folder_path, filename)
if os.path.isfile(file_path): # 確保是文件而不是文件夾
file_extension = os.path.splitext(filename)[1].lower() # 獲取文件擴(kuò)展名
if not file_extension: # 沒(méi)有擴(kuò)展名的文件跳過(guò)
continue
# 創(chuàng)建目標(biāo)文件夾
target_folder = os.path.join(folder_path, file_extension[1:] + "_Files") # 例如 ".txt" -> "txt_Files"
os.makedirs(target_folder, exist_ok=True)
# 移動(dòng)文件
shutil.move(file_path, target_folder)
print(f"文件 '{filename}' 已移動(dòng)到 '{target_folder}'")
print("文件整理完成!")
except Exception as e:
print(f"發(fā)生錯(cuò)誤: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的文件夾路徑
folder = "D:/MyDocuments/Downloads" # 示例路徑
organize_files_by_type(folder)
使用方法:
- 將代碼保存為
organize_files.py。 - 修改
folder變量為你需要整理的文件夾路徑。 - 運(yùn)行
python organize_files.py。
3. 查找并刪除空文件夾
這個(gè)腳本可以遞歸地遍歷指定目錄,找出并刪除所有空文件夾,幫助你清理磁盤(pán)空間。
用途: 清理項(xiàng)目殘余、舊的下載目錄等。
所需庫(kù): os (Python內(nèi)置庫(kù))
import os
def delete_empty_folders(folder_path):
"""
遞歸查找并刪除指定路徑下的所有空文件夾。
:param folder_path: 需要清理的根文件夾路徑
:return: 被刪除的空文件夾數(shù)量
"""
deleted_count = 0
for dirpath, dirnames, filenames in os.walk(folder_path, topdown=False):
# topdown=False 確保先處理子目錄,再處理父目錄
if not dirnames and not filenames:
try:
os.rmdir(dirpath)
print(f"已刪除空文件夾: {dirpath}")
deleted_count += 1
except OSError as e:
print(f"無(wú)法刪除文件夾 {dirpath}: {e}")
return deleted_count
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的根文件夾路徑
root_folder = "D:/MyDocuments/Temp" # 示例路徑
print(f"開(kāi)始清理 '{root_folder}' 下的空文件夾...")
count = delete_empty_folders(root_folder)
print(f"清理完成,共刪除 {count} 個(gè)空文件夾。")
使用方法:
- 將代碼保存為
delete_empty_folders.py。 - 修改
root_folder變量為你需要清理的根文件夾路徑。 - 運(yùn)行
python delete_empty_folders.py。
4. 合并多個(gè)TXT文件
將多個(gè)文本文件內(nèi)容合并到一個(gè)新的文本文件中,非常適合合并日志、報(bào)告等。
用途: 匯總報(bào)告、日志分析。
所需庫(kù): Python內(nèi)置的文件I/O操作
import os
def merge_txt_files(folder_path, output_filename="merged_output.txt"):
"""
合并指定文件夾下所有TXT文件的內(nèi)容到一個(gè)新的TXT文件。
:param folder_path: 包含TXT文件的文件夾路徑
:param output_filename: 合并后的輸出文件名
"""
output_path = os.path.join(folder_path, output_filename)
try:
with open(output_path, 'w', encoding='utf-8') as outfile:
for filename in os.listdir(folder_path):
if filename.endswith(".txt") and filename != output_filename:
filepath = os.path.join(folder_path, filename)
try:
with open(filepath, 'r', encoding='utf-8') as infile:
outfile.write(f"--- 文件開(kāi)始: {filename} ---\n")
outfile.write(infile.read())
outfile.write(f"\n--- 文件結(jié)束: {filename} ---\n\n")
print(f"已合并文件: {filename}")
except UnicodeDecodeError:
print(f"警告: 文件 '{filename}' 編碼錯(cuò)誤,嘗試使用GBK...")
try:
with open(filepath, 'r', encoding='gbk') as infile:
outfile.write(f"--- 文件開(kāi)始: {filename} (GBK編碼) ---\n")
outfile.write(infile.read())
outfile.write(f"\n--- 文件結(jié)束: {filename} (GBK編碼) ---\n\n")
print(f"已合并文件: {filename} (GBK)")
except Exception as e:
print(f"錯(cuò)誤: 無(wú)法讀取文件 '{filename}' ({e})")
except Exception as e:
print(f"錯(cuò)誤: 讀取文件 '{filename}' 失敗 ({e})")
print(f"\n所有TXT文件已成功合并到 '{output_path}'")
except Exception as e:
print(f"發(fā)生錯(cuò)誤: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的文件夾路徑
folder = "D:/MyDocuments/Reports" # 示例路徑
merge_txt_files(folder, "Annual_Report_Combined.txt")
使用方法:
- 將代碼保存為
merge_txt.py。 - 修改
folder變量為你需要合并TXT文件的文件夾路徑。 - (可選)修改
output_filename為你想要的輸出文件名。 - 運(yùn)行
python merge_txt.py。
5. 批量查找替換文本內(nèi)容
在多個(gè)文本文件或代碼文件中批量查找并替換指定字符串,省去手動(dòng)修改的麻煩。
用途: 代碼重構(gòu)、文檔更新、統(tǒng)一術(shù)語(yǔ)。
所需庫(kù): Python內(nèi)置的文件I/O操作
import os
def batch_find_replace(folder_path, old_text, new_text, file_extension=".txt"):
"""
在指定文件夾下所有指定類(lèi)型的文件中查找并替換文本。
:param folder_path: 文件夾路徑
:param old_text: 需要查找的舊文本
:param new_text: 替換舊文本的新文本
:param file_extension: 需要處理的文件擴(kuò)展名 (例如 ".txt", ".md", ".py")
"""
replaced_count = 0
for filename in os.listdir(folder_path):
if filename.endswith(file_extension):
filepath = os.path.join(folder_path, filename)
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
if old_text in content:
new_content = content.replace(old_text, new_text)
with open(filepath, 'w', encoding='utf-8') as f:
f.write(new_content)
print(f"文件 '{filename}' 中的 '{old_text}' 已替換為 '{new_text}'")
replaced_count += 1
except UnicodeDecodeError:
print(f"警告: 文件 '{filename}' 編碼錯(cuò)誤,跳過(guò)。")
except Exception as e:
print(f"處理文件 '{filename}' 時(shí)發(fā)生錯(cuò)誤: {e}")
print(f"\n批量查找替換完成,共修改了 {replaced_count} 個(gè)文件。")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的文件夾路徑、舊文本、新文本和文件擴(kuò)展名
folder = "D:/MyDocuments/Projects/MyCode" # 示例路徑
old_string = "deprecated_function"
new_string = "new_function_v2"
file_ext = ".py" # 例如,可以修改為 ".txt", ".md", ".html" 等
batch_find_replace(folder, old_string, new_string, file_ext)
使用方法:
- 將代碼保存為
batch_replace.py。 - 修改
folder、old_string、new_string和file_ext。 - 運(yùn)行
python batch_replace.py。
6. 將CSV文件轉(zhuǎn)換為Excel
將一個(gè)或多個(gè)CSV文件轉(zhuǎn)換為Excel的XLSX格式,方便數(shù)據(jù)管理和共享。
用途: 數(shù)據(jù)格式轉(zhuǎn)換、兼容不同軟件。
所需庫(kù): pandas
import pandas as pd
import os
def csv_to_excel(csv_folder_path, output_excel_filename="merged_output.xlsx"):
"""
將指定文件夾下的所有CSV文件合并并轉(zhuǎn)換為一個(gè)Excel文件。
:param csv_folder_path: 包含CSV文件的文件夾路徑
:param output_excel_filename: 輸出的Excel文件名
"""
all_data = []
for filename in os.listdir(csv_folder_path):
if filename.endswith(".csv"):
filepath = os.path.join(csv_folder_path, filename)
try:
# 嘗試多種編碼讀取CSV
df = pd.read_csv(filepath, encoding='utf-8')
all_data.append(df)
print(f"已讀取CSV文件: {filename}")
except UnicodeDecodeError:
print(f"警告: CSV文件 '{filename}' 編碼錯(cuò)誤,嘗試使用GBK...")
try:
df = pd.read_csv(filepath, encoding='gbk')
all_data.append(df)
print(f"已讀取CSV文件: {filename} (GBK)")
except Exception as e:
print(f"錯(cuò)誤: 無(wú)法讀取CSV文件 '{filename}' ({e})")
except Exception as e:
print(f"處理CSV文件 '{filename}' 時(shí)發(fā)生錯(cuò)誤: {e}")
if not all_data:
print("未找到任何CSV文件或所有文件讀取失敗。")
return
# 合并所有DataFrame
merged_df = pd.concat(all_data, ignore_index=True)
# 寫(xiě)入Excel
output_path = os.path.join(csv_folder_path, output_excel_filename)
try:
merged_df.to_excel(output_path, index=False)
print(f"\n所有CSV文件已成功合并并轉(zhuǎn)換為Excel文件: '{output_path}'")
except Exception as e:
print(f"寫(xiě)入Excel文件失敗: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的文件夾路徑和輸出文件名
csv_folder = "D:/MyDocuments/Data/Sales" # 示例路徑
csv_to_excel(csv_folder, "Sales_Data_Combined.xlsx")
使用方法:
- 將代碼保存為
csv_to_excel.py。 - 修改
csv_folder變量為你包含CSV文件的文件夾路徑。 - (可選)修改
output_excel_filename。 - 運(yùn)行
python csv_to_excel.py。
7. 合并多個(gè)Excel文件
將多個(gè)Excel文件(或同一個(gè)Excel文件的多個(gè)工作表)合并到一個(gè)新的Excel文件中的不同工作表,或合并到一個(gè)工作表中。
用途: 匯總各部門(mén)報(bào)告、合并不同日期的數(shù)據(jù)。
所需庫(kù): pandas
import pandas as pd
import os
def merge_excel_files(excel_folder_path, output_excel_filename="merged_all_data.xlsx"):
"""
將指定文件夾下的所有Excel文件(每個(gè)文件作為一個(gè)工作表)合并到一個(gè)新的Excel文件。
:param excel_folder_path: 包含Excel文件的文件夾路徑
:param output_excel_filename: 輸出的Excel文件名
"""
output_path = os.path.join(excel_folder_path, output_excel_filename)
writer = pd.ExcelWriter(output_path, engine='openpyxl')
for filename in os.listdir(excel_folder_path):
if filename.endswith((".xlsx", ".xls")) and filename != output_excel_filename:
filepath = os.path.join(excel_folder_path, filename)
try:
df = pd.read_excel(filepath)
sheet_name = os.path.splitext(filename)[0][:30] # 工作表名稱(chēng)不能太長(zhǎng)
df.to_excel(writer, sheet_name=sheet_name, index=False)
print(f"已將文件 '{filename}' 寫(xiě)入到工作表 '{sheet_name}'")
except Exception as e:
print(f"處理Excel文件 '{filename}' 時(shí)發(fā)生錯(cuò)誤: {e}")
try:
writer.save()
print(f"\n所有Excel文件已成功合并到 '{output_path}'")
except Exception as e:
print(f"寫(xiě)入Excel文件失敗: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的文件夾路徑和輸出文件名
excel_folder = "D:/MyDocuments/Data/MonthlyReports" # 示例路徑
merge_excel_files(excel_folder, "Combined_Monthly_Reports.xlsx")
使用方法:
- 將代碼保存為
merge_excel.py。 - 修改
excel_folder變量為你包含Excel文件的文件夾路徑。 - (可選)修改
output_excel_filename。 - 運(yùn)行
python merge_excel.py。
8. 從Excel中提取特定數(shù)據(jù)
根據(jù)條件從Excel文件中篩選、提取所需的數(shù)據(jù),并保存為新的Excel文件或CSV文件。
用途: 數(shù)據(jù)分析預(yù)處理、生成報(bào)告子集。
所需庫(kù): pandas
import pandas as pd
import os
def extract_data_from_excel(input_excel_path, output_filename="extracted_data.xlsx"):
"""
從Excel文件中讀取數(shù)據(jù),并根據(jù)條件提取特定數(shù)據(jù)。
:param input_excel_path: 輸入的Excel文件路徑
:param output_filename: 提取數(shù)據(jù)后保存的輸出文件名
"""
try:
df = pd.read_excel(input_excel_path)
print("原始數(shù)據(jù)前5行:")
print(df.head())
# 示例:提取 '銷(xiāo)售額' 大于 5000 且 '地區(qū)' 為 '華東' 的數(shù)據(jù)
# 請(qǐng)根據(jù)你的實(shí)際數(shù)據(jù)列名和條件進(jìn)行修改
extracted_df = df[(df['銷(xiāo)售額'] > 5000) & (df['地區(qū)'] == '華東')]
output_path = os.path.join(os.path.dirname(input_excel_path), output_filename)
extracted_df.to_excel(output_path, index=False)
print(f"\n成功提取數(shù)據(jù)并保存到 '{output_path}'")
print("提取數(shù)據(jù)前5行:")
print(extracted_df.head())
except FileNotFoundError:
print(f"錯(cuò)誤: 文件未找到 '{input_excel_path}'")
except KeyError as e:
print(f"錯(cuò)誤: Excel文件中缺少列 '{e}'。請(qǐng)檢查列名是否正確。")
except Exception as e:
print(f"處理Excel文件時(shí)發(fā)生錯(cuò)誤: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的輸入Excel文件路徑
input_file = "D:/MyDocuments/Data/Sales_Data.xlsx" # 示例路徑
# 請(qǐng)確保你的Excel文件中有 '銷(xiāo)售額' 和 '地區(qū)' 列,并包含相應(yīng)的數(shù)據(jù)
# 如果沒(méi)有,請(qǐng)根據(jù)你的數(shù)據(jù)調(diào)整篩選條件或創(chuàng)建示例Excel文件進(jìn)行測(cè)試。
# 示例Excel文件內(nèi)容 (Sales_Data.xlsx):
# 銷(xiāo)售員,地區(qū),銷(xiāo)售額,產(chǎn)品
# 張三,華東,6000,A
# 李四,華南,4500,B
# 王五,華東,7200,C
# 趙六,華北,3000,A
# 錢(qián)七,華東,5500,B
extract_data_from_excel(input_file, "High_Sales_East_Region.xlsx")
使用方法:
- 將代碼保存為
extract_excel_data.py。 - 修改
input_file為你的Excel文件路徑。 - 根據(jù)你的Excel文件內(nèi)容,修改
extracted_df這一行中的列名和篩選條件。 - 運(yùn)行
python extract_excel_data.py。
9. 批量圖片縮放
批量調(diào)整一個(gè)文件夾內(nèi)所有圖片的尺寸,可用于優(yōu)化網(wǎng)站圖片、制作縮略圖等。
用途: 網(wǎng)站圖片優(yōu)化、批量生成縮略圖。
所需庫(kù): Pillow (PIL)
from PIL import Image
import os
def batch_resize_images(folder_path, output_folder_name="resized_images", size=(800, 600)):
"""
批量縮放指定文件夾下的所有圖片。
:param folder_path: 包含圖片的文件夾路徑
:param output_folder_name: 縮放后圖片保存的子文件夾名稱(chēng)
:param size: 目標(biāo)尺寸 (寬度, 高度)
"""
output_folder = os.path.join(folder_path, output_folder_name)
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(folder_path):
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
filepath = os.path.join(folder_path, filename)
try:
with Image.open(filepath) as img:
img_resized = img.resize(size)
output_filepath = os.path.join(output_folder, filename)
img_resized.save(output_filepath)
print(f"圖片 '{filename}' 已縮放并保存到 '{output_folder_name}'")
except Exception as e:
print(f"處理圖片 '{filename}' 時(shí)發(fā)生錯(cuò)誤: {e}")
print("\n所有圖片縮放完成!")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的圖片文件夾路徑和目標(biāo)尺寸
image_folder = "D:/MyDocuments/ImageGallery" # 示例路徑
target_size = (1280, 720) # 目標(biāo)寬度和高度
batch_resize_images(image_folder, size=target_size)
使用方法:
- 將代碼保存為
resize_images.py。 - 修改
image_folder為你的圖片文件夾路徑。 - 修改
target_size為你想要的圖片尺寸。 - 運(yùn)行
python resize_images.py。
10. 批量圖片格式轉(zhuǎn)換
將一個(gè)文件夾內(nèi)的所有圖片批量轉(zhuǎn)換為另一種格式(例如PNG轉(zhuǎn)JPG,或JPG轉(zhuǎn)PNG)。
用途: 統(tǒng)一圖片格式、兼容不同平臺(tái)。
所需庫(kù): Pillow (PIL)
from PIL import Image
import os
def batch_convert_images(folder_path, output_folder_name="converted_images", target_format="PNG"):
"""
批量轉(zhuǎn)換指定文件夾下的所有圖片格式。
:param folder_path: 包含圖片的文件夾路徑
:param output_folder_name: 轉(zhuǎn)換后圖片保存的子文件夾名稱(chēng)
:param target_format: 目標(biāo)格式 (例如 "PNG", "JPEG", "BMP")
"""
output_folder = os.path.join(folder_path, output_folder_name)
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(folder_path):
# 排除已是目標(biāo)格式的文件,防止重復(fù)處理
if not filename.lower().endswith(f'.{target_format.lower()}'):
filepath = os.path.join(folder_path, filename)
try:
with Image.open(filepath) as img:
# 構(gòu)建新的文件名和路徑
base_name = os.path.splitext(filename)[0]
output_filepath = os.path.join(output_folder, f"{base_name}.{target_format.lower()}")
img.save(output_filepath, format=target_format)
print(f"圖片 '{filename}' 已轉(zhuǎn)換為 {target_format} 格式并保存到 '{output_folder_name}'")
except Exception as e:
print(f"處理圖片 '{filename}' 時(shí)發(fā)生錯(cuò)誤: {e}")
print("\n所有圖片格式轉(zhuǎn)換完成!")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的圖片文件夾路徑和目標(biāo)格式
image_folder = "D:/MyDocuments/ImageGallery" # 示例路徑
target_format = "JPEG" # 例如 "PNG", "JPEG", "BMP"
batch_convert_images(image_folder, target_format=target_format)
使用方法:
- 將代碼保存為
convert_images.py。 - 修改
image_folder為你的圖片文件夾路徑。 - 修改
target_format為你想要轉(zhuǎn)換的目標(biāo)格式(如 “JPEG”, “PNG”)。 - 運(yùn)行
python convert_images.py。
11. 自動(dòng)打開(kāi)指定網(wǎng)頁(yè)
使用默認(rèn)瀏覽器打開(kāi)一個(gè)或多個(gè)指定的網(wǎng)頁(yè)鏈接。
用途: 每日工作網(wǎng)站快速啟動(dòng)、批量打開(kāi)參考資料。
所需庫(kù): webbrowser (Python內(nèi)置庫(kù))
import webbrowser
import time
def open_websites(urls):
"""
在默認(rèn)瀏覽器中打開(kāi)一個(gè)或多個(gè)指定的網(wǎng)頁(yè)鏈接。
:param urls: 一個(gè)包含網(wǎng)頁(yè)鏈接的列表
"""
for url in urls:
try:
webbrowser.open_new_tab(url)
print(f"已打開(kāi)網(wǎng)頁(yè): {url}")
time.sleep(1) # 暫停1秒,避免同時(shí)打開(kāi)過(guò)多標(biāo)簽頁(yè)導(dǎo)致瀏覽器卡頓
except Exception as e:
print(f"無(wú)法打開(kāi)網(wǎng)頁(yè) '{url}': {e}")
print("\n所有指定網(wǎng)頁(yè)已嘗試打開(kāi)。")
if __name__ == "__main__":
# 請(qǐng)修改為你需要打開(kāi)的網(wǎng)頁(yè)鏈接列表
my_work_websites = [
"https://www.google.com",
"https://chat.openai.com",
"https://github.com",
"https://www.example.com" # 替換為你的實(shí)際網(wǎng)址
]
open_websites(my_work_websites)
使用方法:
- 將代碼保存為
open_websites.py。 - 修改
my_work_websites列表,填入你想要打開(kāi)的網(wǎng)址。 - 運(yùn)行
python open_websites.py。
12. 定時(shí)提醒/消息
設(shè)置一個(gè)定時(shí)提醒,在指定時(shí)間后彈出一個(gè)簡(jiǎn)單的消息。這個(gè)例子使用命令行輸出,你可以進(jìn)一步擴(kuò)展為桌面通知。
用途: 午休提醒、會(huì)議提醒、任務(wù)截止提醒。
所需庫(kù): time (Python內(nèi)置庫(kù))
import time
def set_timer_reminder(minutes, message):
"""
設(shè)置一個(gè)定時(shí)提醒。
:param minutes: 提醒間隔時(shí)間(分鐘)
:param message: 提醒消息內(nèi)容
"""
seconds = minutes * 60
print(f"提醒已設(shè)置!將在 {minutes} 分鐘后(即 {seconds} 秒后)顯示消息:'{message}'")
time.sleep(seconds)
print("\n" + "="*30)
print(f"提醒時(shí)間到!消息:{message}")
print("="*30 + "\n")
if __name__ == "__main__":
# 請(qǐng)修改為你需要設(shè)置的提醒時(shí)間和消息
reminder_minutes = 30 # 30分鐘后提醒
reminder_message = "該休息一下眼睛了!"
set_timer_reminder(reminder_minutes, reminder_message)
# 另一個(gè)例子
# set_timer_reminder(5, "記得保存當(dāng)前工作!")
使用方法:
- 將代碼保存為
timer_reminder.py。 - 修改
reminder_minutes為你想要設(shè)置的分鐘數(shù)。 - 修改
reminder_message為你想要顯示的提醒消息。 - 運(yùn)行
python timer_reminder.py。
13. 剪貼板內(nèi)容操作
快速獲取剪貼板內(nèi)容或?qū)⑽谋緩?fù)制到剪貼板,實(shí)現(xiàn)自動(dòng)化復(fù)制粘貼。
用途: 批量復(fù)制粘貼、快速填充表單。
所需庫(kù): pyperclip
import pyperclip
def clipboard_operations():
"""
演示剪貼板的復(fù)制和粘貼操作。
"""
print("--- 剪貼板操作演示 ---")
# 1. 獲取剪貼板內(nèi)容
try:
clipboard_content = pyperclip.paste()
print(f"當(dāng)前剪貼板內(nèi)容: '{clipboard_content}'")
except pyperclip.PyperclipException as e:
print(f"無(wú)法獲取剪貼板內(nèi)容: {e}. 請(qǐng)確保安裝了必要的剪貼板后端(如xclip/xsel on Linux)。")
return # 如果無(wú)法獲取,則退出,避免后續(xù)錯(cuò)誤
# 2. 將文本復(fù)制到剪貼板
text_to_copy = "Hello, Python Automation!"
pyperclip.copy(text_to_copy)
print(f"已將文本 '{text_to_copy}' 復(fù)制到剪貼板。")
# 3. 再次獲取剪貼板內(nèi)容,驗(yàn)證是否成功復(fù)制
new_clipboard_content = pyperclip.paste()
print(f"驗(yàn)證:新的剪貼板內(nèi)容為: '{new_clipboard_content}'")
if new_clipboard_content == text_to_copy:
print("剪貼板操作成功!")
else:
print("剪貼板操作可能出現(xiàn)問(wèn)題。")
if __name__ == "__main__":
clipboard_operations()
使用方法:
- 將代碼保存為
clipboard_tool.py。 - 運(yùn)行
python clipboard_tool.py。 - 你可以手動(dòng)復(fù)制一些文本到剪貼板,然后運(yùn)行腳本查看。
14. PDF文件合并
將多個(gè)PDF文件合并為一個(gè)PDF文件。
用途: 合并報(bào)告、合同、掃描件。
所需庫(kù): PyPDF2
from PyPDF2 import PdfMerger
import os
def merge_pdf_files(folder_path, output_filename="merged_document.pdf"):
"""
合并指定文件夾下的所有PDF文件。
:param folder_path: 包含PDF文件的文件夾路徑
:param output_filename: 合并后的輸出文件名
"""
merger = PdfMerger()
pdf_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.pdf')]
pdf_files.sort() # 按文件名排序,確保合并順序
if not pdf_files:
print("在指定文件夾中未找到任何PDF文件。")
return
for filename in pdf_files:
filepath = os.path.join(folder_path, filename)
try:
merger.append(filepath)
print(f"已添加文件: {filename}")
except Exception as e:
print(f"無(wú)法添加文件 '{filename}': {e}")
output_path = os.path.join(folder_path, output_filename)
try:
with open(output_path, "wb") as output_file:
merger.write(output_file)
print(f"\n所有PDF文件已成功合并到 '{output_path}'")
except Exception as e:
print(f"寫(xiě)入合并PDF文件失敗: {e}")
finally:
merger.close()
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的PDF文件夾路徑
pdf_folder = "D:/MyDocuments/Reports/Quarterly" # 示例路徑
merge_pdf_files(pdf_folder, "Q4_Combined_Report.pdf")
使用方法:
- 將代碼保存為
merge_pdf.py。 - 修改
pdf_folder為你的PDF文件文件夾路徑。 - (可選)修改
output_filename。 - 運(yùn)行
python merge_pdf.py。
15. PDF文本內(nèi)容提取
從PDF文件中提取所有文本內(nèi)容,并保存到TXT文件中。
用途: PDF內(nèi)容檢索、數(shù)據(jù)抽取、文本分析。
所需庫(kù): PyPDF2
from PyPDF2 import PdfReader
import os
def extract_text_from_pdf(pdf_path, output_txt_filename=None):
"""
從PDF文件中提取所有文本內(nèi)容并保存到TXT文件。
:param pdf_path: 輸入的PDF文件路徑
:param output_txt_filename: 輸出的TXT文件名 (如果為None,則使用PDF文件名)
"""
if not output_txt_filename:
base_name = os.path.splitext(os.path.basename(pdf_path))[0]
output_txt_filename = f"{base_name}_extracted.txt"
output_path = os.path.join(os.path.dirname(pdf_path), output_txt_filename)
try:
reader = PdfReader(pdf_path)
text_content = ""
for page in reader.pages:
text_content += page.extract_text() + "\n" # 提取每頁(yè)文本并換行
with open(output_path, 'w', encoding='utf-8') as f:
f.write(text_content)
print(f"成功從 '{pdf_path}' 提取文本并保存到 '{output_path}'")
except FileNotFoundError:
print(f"錯(cuò)誤: PDF文件未找到 '{pdf_path}'")
except Exception as e:
print(f"處理PDF文件時(shí)發(fā)生錯(cuò)誤: {e}")
if __name__ == "__main__":
# 請(qǐng)修改為你實(shí)際的PDF文件路徑
input_pdf = "D:/MyDocuments/Documents/Contract_Draft.pdf" # 示例路徑
extract_text_from_pdf(input_pdf)
# 也可以指定輸出文件名
# extract_text_from_pdf(input_pdf, "Contract_Text.txt")
使用方法:
- 將代碼保存為
extract_pdf_text.py。 - 修改
input_pdf為你的PDF文件路徑。 - (可選)修改
output_txt_filename。 - 運(yùn)行
python extract_pdf_text.py。
常見(jiàn)問(wèn)題與提示
在實(shí)踐這些腳本時(shí),你可能會(huì)遇到一些問(wèn)題。以下是一些常見(jiàn)問(wèn)題及其解決方案:
1.ModuleNotFoundError (模塊未找到錯(cuò)誤):
- 原因: 對(duì)應(yīng)的Python庫(kù)沒(méi)有安裝。
- 解決方案: 確保你按照“準(zhǔn)備工作”章節(jié)的指示,使用
pip install 庫(kù)名安裝了所有必要的庫(kù)。例如,如果出現(xiàn)ModuleNotFoundError: No module named 'pandas',則運(yùn)行pip install pandas。
2.文件路徑問(wèn)題 (FileNotFoundError / PermissionError):
原因: 文件路徑不正確,或者你沒(méi)有訪問(wèn)該路徑的權(quán)限。
解決方案:
- 仔細(xì)檢查路徑字符串是否拼寫(xiě)正確,包括大小寫(xiě)。
- Windows路徑建議使用正斜杠
/(例如C:/Users/Desktop/) 或雙反斜杠\\(例如C:\\Users\\Desktop\\),或者使用原始字符串r'C:\Users\Desktop\'。 - 確保Python腳本有權(quán)限讀寫(xiě)目標(biāo)文件夾。如果是在系統(tǒng)保護(hù)目錄(如
C:\Windows或程序文件目錄)操作,可能會(huì)遇到權(quán)限問(wèn)題。嘗試將文件放在用戶(hù)目錄(如桌面、文檔)進(jìn)行測(cè)試。
3.編碼問(wèn)題 (UnicodeDecodeError):
- 原因: 文本文件(如TXT、CSV)的編碼格式與腳本中指定的編碼不一致(默認(rèn)為UTF-8)。
- 解決方案: 在
open()函數(shù)中嘗試不同的編碼,如encoding='gbk'、encoding='latin-1'。在我們的腳本中已經(jīng)嘗試了UTF-8和GBK。
4.文件被占用:
- 原因: 你正在嘗試操作的文件被其他程序(如Excel、Word、圖片查看器)打開(kāi)并占用。
- 解決方案: 關(guān)閉所有可能占用目標(biāo)文件的程序,然后再運(yùn)行腳本。
5.不熟悉命令行操作:
解決方案: 多加練習(xí)。記住 cd 命令用于切換目錄,dir (Windows) 或 ls (macOS/Linux) 用于列出當(dāng)前目錄內(nèi)容,python your_script.py 用于運(yùn)行腳本。
6.代碼錯(cuò)誤 (SyntaxError, TypeError 等):
解決方案:
- 仔細(xì)閱讀錯(cuò)誤信息,它通常會(huì)告訴你錯(cuò)誤發(fā)生在哪一行以及錯(cuò)誤類(lèi)型。
- 使用VS Code等編輯器,它們通常會(huì)高亮顯示語(yǔ)法錯(cuò)誤。
- 對(duì)于初學(xué)者,逐步運(yùn)行(或在關(guān)鍵位置添加
print()語(yǔ)句)是很好的調(diào)試方法,可以查看變量的值和代碼的執(zhí)行流程。
總結(jié)與展望
恭喜你!通過(guò)學(xué)習(xí)和實(shí)踐這15個(gè)自動(dòng)化腳本,你已經(jīng)邁出了Python自動(dòng)化辦公的第一步。你不僅學(xué)會(huì)了如何用代碼解決實(shí)際工作中的痛點(diǎn),更重要的是,你掌握了一種全新的思考問(wèn)題和提升效率的方式。
Python自動(dòng)化辦公的潛力遠(yuǎn)不止于此。你可以繼續(xù)探索:
- 更復(fù)雜的Excel操作: 數(shù)據(jù)透 視、圖表生成、與其他數(shù)據(jù)源聯(lián)動(dòng)。
- Web自動(dòng)化: 使用
Selenium模擬瀏覽器操作,實(shí)現(xiàn)自動(dòng)登錄、表單填寫(xiě)、數(shù)據(jù)抓取。 - 郵件自動(dòng)化: 自動(dòng)發(fā)送郵件、處理附件。
- GUI自動(dòng)化: 使用
PyAutoGUI模擬鼠標(biāo)鍵盤(pán)操作,實(shí)現(xiàn)與任何桌面應(yīng)用的交互。 - 定時(shí)任務(wù): 使用操作系統(tǒng)自帶的定時(shí)任務(wù)(如Windows的任務(wù)計(jì)劃程序,Linux的Cron)結(jié)合Python腳本,實(shí)現(xiàn)無(wú)人值守的自動(dòng)化。
行動(dòng)起來(lái)!
- 實(shí)踐是最好的老師: 不要只看不做,選擇一兩個(gè)你最感興趣或最能解決你實(shí)際問(wèn)題的腳本,親自修改參數(shù)并運(yùn)行它。
- 從模仿到創(chuàng)造: 在理解了這些腳本的原理后,嘗試根據(jù)自己的需求進(jìn)行修改和組合,創(chuàng)造出屬于你自己的自動(dòng)化工具。
- 持續(xù)學(xué)習(xí): Python的世界廣闊而精彩,保持好奇心,不斷學(xué)習(xí)新的庫(kù)和技術(shù)。
以上就是Python解放雙手的15個(gè)超實(shí)用的自動(dòng)化辦公腳本(附代碼)的詳細(xì)內(nèi)容,更多關(guān)于Python自動(dòng)化辦公腳本的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
selenium+unittest實(shí)現(xiàn)web自動(dòng)化的示例代碼
本文主要介紹了selenium+unittest實(shí)現(xiàn)web自動(dòng)化的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析
這篇文章主要介紹了Python?nonlocal關(guān)鍵字?與?global?關(guān)鍵字解析,nonlocal關(guān)鍵字用來(lái)在函數(shù)或其他作用域中使用外層變量,global關(guān)鍵字用來(lái)在函數(shù)或其他局部作用域中使用全局變量,更多香瓜內(nèi)容需要的小伙伴可以參考一下2022-03-03
Python利用Selenium實(shí)現(xiàn)自動(dòng)化分頁(yè)處理和信息提取
在 Web 自動(dòng)化測(cè)試或數(shù)據(jù)抓取場(chǎng)景中,分頁(yè)處理是一個(gè)常見(jiàn)的需求,通過(guò) Selenium,我們可以實(shí)現(xiàn)對(duì)多頁(yè)面內(nèi)容的自動(dòng)遍歷,并從中提取所需的信息,本文將詳細(xì)介紹如何利用 Selenium 進(jìn)行自動(dòng)化分頁(yè)處理和信息提取,需要的朋友可以參考下2025-06-06
用Python寫(xiě)一個(gè)球球大作戰(zhàn)小游戲
這篇文章主要介紹了如何用Python寫(xiě)一個(gè)球球大作戰(zhàn)小游戲,我們需要實(shí)現(xiàn)每位玩家操控一個(gè)可自由移動(dòng)的小球球,通過(guò)滑動(dòng)屏幕,你可以指揮自己的球球在地圖上四處游走,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
python3使用matplotlib繪制散點(diǎn)圖
這篇文章主要為大家詳細(xì)介紹了python3使用matplotlib繪制散點(diǎn)圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析
這篇文章主要為大家介紹了Python?虛擬機(jī)字典dict內(nèi)存優(yōu)化方法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Python實(shí)現(xiàn)PDF轉(zhuǎn)Word的多種方式總結(jié)
這篇文章主要為大家詳細(xì)介紹了三種Python實(shí)現(xiàn)PDF文件轉(zhuǎn)Word文檔的方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11

