在什么網(wǎng)站做推廣最好鞍山seo公司
目錄
1. 生成隨機文本
2. 計算文本文件中的字數(shù)
3. 替換文件文件中的字串
4. 多文件名的批量替換
5. 從網(wǎng)站提取數(shù)據(jù)
6. 批量下載圖片
7.批量刪除空文件夾
8.Excel表格讀寫
9.合并Excel表格工作簿
10.數(shù)據(jù)庫SQL查詢
11. 系統(tǒng)進程查殺
12.圖像尺寸調(diào)整和裁剪
13.圖片添加水印
14. 創(chuàng)建圖像縮略圖
15.PDF中提取文本
16. 合并多個PDF文件
1. 生成隨機文本
import random
import string
def generate_random_text(length):letters = string.ascii_letters + string.digits + string.punctuationrandom_text = ''.join(random.choice(letters) for i in range(length))return random_text
函數(shù)generate_random_text
接受一個參數(shù)length
,用于指定生成的隨機文本的長度。函數(shù)內(nèi)部,它首先定義了一個letters
字符串,包含了所有的ASCII字母(大寫和小寫)、數(shù)字以及標點符號。然后,它使用列表推導(dǎo)式和random.choice
函數(shù)從letters
中隨機選擇字符,并將這些字符連接成一個字符串。最后,函數(shù)返回這個隨機生成的字符串。以下是對代碼的詳細解釋:
-
import random
:
導(dǎo)入Python的random
模塊,該模塊提供了生成隨機數(shù)的功能。 -
import string
:
導(dǎo)入Python的string
模塊,該模塊包含了一些常用的字符串常量,如ASCII字母、數(shù)字、標點符號等。 -
def generate_random_text(length):
:
定義了一個名為generate_random_text
的函數(shù),該函數(shù)接受一個參數(shù)length
,表示要生成的隨機文本的長度。 -
letters = string.ascii_letters + string.digits + string.punctuation
:
創(chuàng)建了一個名為letters
的字符串,該字符串包含了所有ASCII字母(大寫和小寫)、數(shù)字以及標點符號。這是為了確保生成的隨機文本可以包含這些字符。 -
random_text = ''.join(random.choice(letters) for i in range(length))
:
使用列表推導(dǎo)式(list comprehension)和random.choice
函數(shù)來生成隨機文本。random.choice(letters)
:從letters
字符串中隨機選擇一個字符。for i in range(length)
:循環(huán)length
次,確保生成的隨機文本長度為length
。''.join(...)
:將生成的隨機字符列表連接成一個字符串。
-
return random_text
:
返回生成的隨機文本字符串。
2. 計算文本文件中的字數(shù)
def count_words(file_path):with open(file_path, 'r') as f:text = f.read()word_count = len(text.split())return word_count
函數(shù)count_words
接受一個文件路徑file_path
作為參數(shù),并返回該文件中單詞的數(shù)量。以下是函數(shù)的詳細解釋:
-
def count_words(file_path):
這是函數(shù)的定義行,其中count_words
是函數(shù)名,file_path
是唯一的參數(shù)。 -
with open(file_path, 'r') as f:
使用with
語句和open
函數(shù)來打開指定路徑file_path
的文件。文件以只讀模式('r'
)打開,并將其文件對象賦值給變量f
。with
語句確保文件在操作完成后會被正確關(guān)閉。 -
text = f.read()
讀取文件對象f
中的所有內(nèi)容,并將其作為字符串賦值給變量text
。 -
word_count = len(text.split())
text.split()
方法用于將text
字符串按照空格分割成一個單詞列表。split()
方法默認使用空格作為分隔符,因此它會分割字符串中所有的空格(包括單詞間的空格、換行符后的空格等)。len()
函數(shù)則用于計算這個列表中元素的數(shù)量,即單詞的數(shù)量。 -
return word_count
函數(shù)返回計算得到的單詞數(shù)量。
請注意,這個函數(shù)簡單地通過空格來分割單詞,因此可能無法正確處理某些復(fù)雜情況,比如標點符號緊挨著單詞、縮寫詞等。對于更準確的單詞計數(shù),可能需要使用更復(fù)雜的文本處理庫,如NLTK(Natural Language Toolkit)或正則表達式。
此外,如果文件非常大,使用f.read()
將整個文件內(nèi)容讀入內(nèi)存可能會導(dǎo)致內(nèi)存不足。在這種情況下,可以考慮逐行讀取文件并計算單詞數(shù)量,以節(jié)省內(nèi)存。
3. 替換文件文件中的字串
def find_replace(file_path, search_text, replace_text):with open(file_path, 'r') as f:text = f.read()modified_text = text.replace(search_text, replace_text)with open(file_path, 'w') as f:f.write(modified_text)
函數(shù)?find_replace
?執(zhí)行了一個常見的文本文件操作:查找并替換文件中的文本。以下是該函數(shù)的詳細解釋:
-
def find_replace(file_path, search_text, replace_text):
定義了一個名為?find_replace
?的函數(shù),它接受三個參數(shù):file_path
(要操作的文件路徑),search_text
(要在文件中查找的文本),和?replace_text
(用于替換找到的文本的文本)。 -
with open(file_path, 'r') as f:
使用?with
?語句和?open
?函數(shù)以只讀模式('r'
)打開指定路徑?file_path
?的文件,并將文件對象賦值給變量?f
。 -
text = f.read()
讀取文件對象?f
?中的所有內(nèi)容,并將其作為字符串賦值給變量?text
。 -
modified_text = text.replace(search_text, replace_text)
使用字符串的?replace
?方法將?text
?中的所有?search_text
?實例替換為?replace_text
。替換后的文本存儲在?modified_text
?變量中。 -
with open(file_path, 'w') as f:
再次使用?with
?語句和?open
?函數(shù),但這次以寫入模式('w'
)打開相同的文件路徑?file_path
。如果文件已存在,這個操作會覆蓋文件的現(xiàn)有內(nèi)容。如果文件不存在,會創(chuàng)建一個新文件。 -
f.write(modified_text)
將修改后的文本?modified_text
?寫入到文件對象中,從而更新文件內(nèi)容。
請注意,這個函數(shù)有幾個潛在的問題和限制:
- 如果文件非常大,將整個文件讀入內(nèi)存并進行替換操作可能會消耗大量內(nèi)存。
- 使用?
'w'
?模式打開文件會覆蓋文件的原始內(nèi)容,如果替換操作失敗,可能會導(dǎo)致數(shù)據(jù)丟失。 - 該函數(shù)不會備份原始文件,所以在進行替換操作之前,最好先備份文件。
- 函數(shù)沒有處理可能出現(xiàn)的異常,如文件不存在、無法讀取或?qū)懭氲取?/li>
在實際應(yīng)用中,可能需要根據(jù)具體需求對這些潛在問題進行適當(dāng)?shù)奶幚怼?/p>
4. 多文件名的批量替換
import os
def rename_files(directory_path, old_name, new_name):for filename in os.listdir(directory_path):if old_name in filename:new_filename = filename.replace(old_name, new_name)os.rename(os.path.join(directory_path,filename),os.path.join(directory_path, new_filename))
函數(shù)?rename_files
?的目的是重命名指定目錄中的文件。函數(shù)接受三個參數(shù):directory_path
(目錄路徑),old_name
(要在文件名中查找并替換的舊名稱),和?new_name
(用于替換舊名稱的新名稱)。以下是對函數(shù)的詳細解釋:
-
import os
導(dǎo)入Python的?os
?模塊,該模塊提供了與操作系統(tǒng)交互的功能,如文件操作、路徑名操作等。 -
def rename_files(directory_path, old_name, new_name):
定義了一個名為?rename_files
?的函數(shù),該函數(shù)接受三個參數(shù):目錄路徑、舊文件名部分和新文件名部分。 -
for filename in os.listdir(directory_path):
使用?os.listdir()
?函數(shù)列出指定目錄?directory_path
?下的所有文件和子目錄名稱。然后,對于目錄中的每個文件(包括子目錄),函數(shù)會執(zhí)行以下操作。 -
if old_name in filename:
檢查當(dāng)前處理的文件名?filename
?是否包含?old_name
。如果包含,則執(zhí)行下面的代碼塊。 -
new_filename = filename.replace(old_name, new_name)
使用字符串的?replace()
?方法將文件名?filename
?中的?old_name
?替換為?new_name
。替換后的新文件名存儲在?new_filename
?變量中。 -
os.rename(os.path.join(directory_path, filename), os.path.join(directory_path, new_filename))
使用?os.rename()
?函數(shù)重命名文件。os.path.join(directory_path, filename)
?用于構(gòu)建文件的完整路徑(包括目錄和文件名),同樣地,os.path.join(directory_path, new_filename)
?用于構(gòu)建新文件名的完整路徑。這兩個路徑分別作為?os.rename()
?函數(shù)的第一個和第二個參數(shù),表示要重命名的原始文件和新文件的路徑。
注意:
- 如果目錄中包含子目錄,這個函數(shù)也會嘗試重命名子目錄,這可能會導(dǎo)致錯誤,因為子目錄通常不能被簡單地重命名。
- 如果目錄中存在多個文件包含相同的?
old_name
,這個函數(shù)會重命名所有這些文件,即使它們的擴展名不同。 - 這個函數(shù)不會處理文件重名的情況。如果新文件名與現(xiàn)有文件名沖突,
os.rename()
?會引發(fā)一個異常。 - 函數(shù)沒有處理可能出現(xiàn)的異常,如權(quán)限問題或文件不存在等。在實際應(yīng)用中,可能需要添加異常處理邏輯。
5. 從網(wǎng)站提取數(shù)據(jù)
import requests
from bs4 import BeautifulSoup
def scrape_data(url):response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')
這段代碼是Python中用于網(wǎng)絡(luò)爬蟲的一個簡單示例,具體用于從給定的URL地址抓取數(shù)據(jù)。這里使用了requests
庫來發(fā)送HTTP請求,以及BeautifulSoup
庫來解析HTML內(nèi)容。下面是對代碼的逐行解釋:
-
import requests
:
導(dǎo)入requests
庫,這是一個用于發(fā)送HTTP請求的庫,可以輕松地發(fā)送GET、POST等請求。 -
from bs4 import BeautifulSoup
:
從bs4
(BeautifulSoup 4)庫中導(dǎo)入BeautifulSoup
類。BeautifulSoup用于解析HTML和XML文檔,并提供了簡單、靈活的方法來遍歷、搜索、修改分析樹等功能。 -
def scrape_data(url):
:
定義一個名為scrape_data
的函數(shù),該函數(shù)接受一個參數(shù)url
,這個參數(shù)代表要抓取的網(wǎng)頁的URL地址。 -
response = requests.get(url)
:
使用requests
庫的get
方法向給定的url
發(fā)送一個HTTP GET請求。服務(wù)器的響應(yīng)會被存儲在response
變量中。 -
soup = BeautifulSoup(response.text, 'html.parser')
:
將response
中的文本內(nèi)容(即網(wǎng)頁的HTML源代碼)傳遞給BeautifulSoup
類,并指定使用html.parser
作為解析器。這樣,BeautifulSoup就可以將HTML代碼解析成一個易于操作和查詢的數(shù)據(jù)結(jié)構(gòu)(通常是一個樹形結(jié)構(gòu))。解析后的數(shù)據(jù)存儲在soup
變量中。
一旦你有了soup
這個BeautifulSoup對象,你就可以使用它的方法來查找和提取網(wǎng)頁中的特定元素、屬性或文本內(nèi)容了。例如,你可以使用soup.find()
、soup.find_all()
等方法來搜索特定的HTML標簽或?qū)傩?#xff0c;以及使用.text
屬性來獲取元素的文本內(nèi)容等。
請注意,這段代碼只是網(wǎng)絡(luò)爬蟲的一部分,它只負責(zé)從網(wǎng)頁上抓取數(shù)據(jù)。如果你想要對抓取到的數(shù)據(jù)進行進一步的處理或分析,你還需要編寫更多的代碼來實現(xiàn)這些功能。此外,在使用網(wǎng)絡(luò)爬蟲時,請務(wù)必遵守網(wǎng)站的robots.txt
規(guī)則以及相關(guān)法律法規(guī),不要進行惡意爬取或侵犯他人隱私。
6. 批量下載圖片
import requests
def download_images(url, save_directory):response = requests.get(url)if response.status_code == 200:images = response.json() # Assuming the API returns a JSON array of image URLsfor index, image_url in enumerate(images):image_response = requests.get(image_url)if image_response.status_code == 200:with open(f"{save_directory}/image_{index}.jpg", "wb") as f:f.write(image_response.content)
函數(shù)?download_images
?用于從指定的 URL 下載多個圖像,并將它們保存到指定的目錄中。以下是對代碼的逐行解釋:
-
import requests
:
導(dǎo)入 Python 的?requests
?庫,這是一個用于發(fā)送 HTTP 請求的庫。 -
def download_images(url, save_directory):
:
定義一個名為?download_images
?的函數(shù),該函數(shù)接受兩個參數(shù):url
?和?save_directory
。url
?是要請求的 API 的 URL,該 API 應(yīng)返回一個包含多個圖像 URL 的 JSON 數(shù)組;save_directory
?是要保存下載圖像的目錄路徑。 -
response = requests.get(url)
:
使用?requests
?庫的?get
?方法發(fā)送一個 HTTP GET 請求到?url
?指定的地址,并將響應(yīng)對象存儲在?response
?變量中。 -
if response.status_code == 200:
:
檢查 HTTP 響應(yīng)的狀態(tài)碼是否為 200,這表示請求成功。 -
images = response.json()
:
如果響應(yīng)成功,使用?response.json()
?方法解析響應(yīng)的 JSON 內(nèi)容,并將解析后的結(jié)果(應(yīng)是一個圖像 URL 的數(shù)組)存儲在?images
?變量中。 -
for index, image_url in enumerate(images):
:
使用?enumerate
?函數(shù)遍歷?images
?數(shù)組,同時獲取每個圖像的索引(index
)和 URL(image_url
)。 -
image_response = requests.get(image_url)
:
對于每個圖像 URL,發(fā)送另一個 HTTP GET 請求以獲取該圖像,并將響應(yīng)對象存儲在?image_response
?變量中。 -
if image_response.status_code == 200:
:
再次檢查 HTTP 響應(yīng)的狀態(tài)碼是否為 200,以確保圖像請求成功。 -
with open(f"{save_directory}/image_{index}.jpg", "wb") as f:
:
使用?with
?語句打開一個文件,文件路徑由?save_directory
?和?image_{index}.jpg
?組成,文件模式為 "wb"(二進制寫入模式)。這意味著我們將以二進制格式將圖像寫入文件。 -
f.write(image_response.content)
:
將?image_response
?中的內(nèi)容(即圖像的二進制數(shù)據(jù))寫入到文件中。
這樣,該函數(shù)將遍歷從 API 返回的所有圖像 URL,下載每個圖像,并將它們以?image_0.jpg
,?image_1.jpg
,?image_2.jpg
?等的名稱保存到指定的目錄中。
注意:
- 該代碼假設(shè) API 返回的 JSON 數(shù)組中的每個元素都是一個有效的圖像 URL。
- 代碼沒有處理可能出現(xiàn)的異常,如網(wǎng)絡(luò)錯誤、無效的 JSON 響應(yīng)或無法寫入文件等。在實際應(yīng)用中,添加異常處理邏輯是很重要的。
- 文件名使用索引編號,如果下載多個圖像可能會有命名沖突的問題。在實際應(yīng)用中,可能需要考慮使用更獨特的文件名,例如基于圖像 URL 的哈希值。
7.批量刪除空文件夾
import os
def remove_empty_folders(directory_path):for root, dirs, files in os.walk(directory_path, topdown=False):for folder in dirs:folder_path = os.path.join(root, folder)if not os.listdir(folder_path):os.rmdir(folder_path)
函數(shù)?remove_empty_folders
?用于刪除給定目錄(及其子目錄)中的所有空文件夾。以下是對代碼的逐行解釋:
-
import os
:
導(dǎo)入Python的os
模塊,該模塊提供了與操作系統(tǒng)交互的函數(shù)和方法。 -
def remove_empty_folders(directory_path):
:
定義一個名為remove_empty_folders
的函數(shù),它接受一個參數(shù)directory_path
,該參數(shù)代表要檢查并刪除空文件夾的目錄路徑。 -
for root, dirs, files in os.walk(directory_path, topdown=False):
:
使用os.walk()
函數(shù)遍歷directory_path
目錄及其所有子目錄。os.walk()
返回一個三元組(dirpath, dirnames, filenames)
,其中:dirpath
是一個字符串,表示目錄的路徑。dirnames
是一個列表,包含了dirpath
目錄下的所有子目錄名(不包括.
和..
,即不包括當(dāng)前目錄和父目錄)。filenames
是一個列表,包含了dirpath
目錄下的所有非目錄子項的名字。
topdown
參數(shù)設(shè)置為False
意味著先遍歷子目錄,再遍歷父目錄。這有助于在刪除子目錄時不會影響到父目錄的遍歷。 -
for folder in dirs:
:
對于當(dāng)前遍歷到的目錄(root
)下的每一個子目錄名(folder
),執(zhí)行以下操作。 -
folder_path = os.path.join(root, folder)
:
使用os.path.join()
函數(shù)將當(dāng)前目錄路徑root
和子目錄名folder
拼接成一個完整的路徑folder_path
。 -
if not os.listdir(folder_path):
:
使用os.listdir()
函數(shù)檢查folder_path
是否為空。如果folder_path
沒有包含任何文件或子目錄,則os.listdir(folder_path)
將返回一個空列表,條件判斷為True
。 -
os.rmdir(folder_path)
:
如果上述條件判斷為真,即folder_path
是一個空文件夾,則使用os.rmdir()
函數(shù)刪除該空文件夾。
這個函數(shù)將遍歷給定目錄及其所有子目錄,并刪除所有空文件夾。注意,這個函數(shù)不會刪除包含隱藏文件或子目錄的空文件夾,也不會刪除非空文件夾。
8.Excel表格讀寫
import pandas as pd
def read_excel(file_path):df = pd.read_excel(file_path)return df
def write_to_excel(data, file_path):df = pd.DataFrame(data)df.to_excel(file_path, index=False)
函數(shù)?read_excel
?和?write_to_excel
,用于讀取和寫入 Excel 文件。兩個函數(shù)都使用了 Pandas 庫,一個 Python 的數(shù)據(jù)分析庫。?
1.?read_excel 函數(shù)
這個函數(shù)接受一個參數(shù)?file_path
,表示要讀取的 Excel 文件的路徑。
2.?write_to_excel 函數(shù)
這個函數(shù)接受兩個參數(shù):data
?和?file_path
。data
?是一個字典、列表或其他可以被轉(zhuǎn)換為 DataFrame 的數(shù)據(jù)結(jié)構(gòu),file_path
?是要寫入數(shù)據(jù)的 Excel 文件的路徑。
通過這兩個函數(shù),你可以方便地讀取和寫入 Excel 文件,而不需要關(guān)心底層的 Excel 文件操作細節(jié)。
9.合并Excel表格工作簿
import pandas as pd
def merge_sheets(file_path, output_file_path):xls = pd.ExcelFile(file_path)df = pd.DataFrame()for sheet_name in xls.sheet_names:sheet_df = pd.read_excel(xls, sheet_name)df = df.append(sheet_df)df.to_excel(output_file_path, index=False)
函數(shù)?merge_sheets
?用于將多個 Excel 工作表(sheets)合并到一個單一的 DataFrame 中,并將該 DataFrame 保存到一個新的 Excel 文件中。以下是代碼的逐行解釋:
-
import pandas as pd
導(dǎo)入 pandas 庫,并為其指定一個別名?pd
。Pandas 是一個用于數(shù)據(jù)分析和處理的 Python 庫。 -
def merge_sheets(file_path, output_file_path):
定義一個名為?merge_sheets
?的函數(shù),該函數(shù)接受兩個參數(shù):file_path
(要合并的 Excel 文件的路徑)和?output_file_path
(輸出文件的路徑)。 -
xls = pd.ExcelFile(file_path)
使用 pandas 的?ExcelFile
?類來讀取?file_path
?指定的 Excel 文件,并將其存儲在?xls
?變量中。 -
df = pd.DataFrame()
創(chuàng)建一個空的 DataFrame 對象?df
。這個 DataFrame 將用于存儲從 Excel 文件的不同工作表中讀取的數(shù)據(jù)。 -
for sheet_name in xls.sheet_names:
遍歷?xls
?對象中存儲的所有工作表名稱。sheet_names
?是一個包含所有工作表名稱的列表。 -
sheet_df = pd.read_excel(xls, sheet_name)
對于每一個工作表名稱?sheet_name
,使用?read_excel
?函數(shù)從?xls
?對象中讀取該工作表的數(shù)據(jù),并將其存儲在?sheet_df
(一個 DataFrame 對象)中。 -
df = df.append(sheet_df)
將?sheet_df
?中的數(shù)據(jù)追加到?df
?中。這樣,df
?最終將包含所有工作表的數(shù)據(jù)。 -
df.to_excel(output_file_path, index=False)
將合并后的 DataFrame?df
?保存到指定的?output_file_path
?路徑。index=False
?表示在保存時不包含 DataFrame 的索引。
需要注意的是,雖然這段代碼能夠合并多個工作表,但它有一個效率問題。在循環(huán)中,每次迭代都會將?sheet_df
?追加到?df
?并立即保存到?output_file_path
。這意味著每次迭代都會覆蓋之前的輸出文件。實際上,你可能只想在循環(huán)結(jié)束后保存一次合并后的 DataFrame。正確的做法應(yīng)該是將?df.to_excel(output_file_path, index=False)
?語句移出循環(huán),放在循環(huán)結(jié)束之后。這樣,所有工作表的數(shù)據(jù)都會被合并到一個 DataFrame 中,然后一次性保存到輸出文件。
10.數(shù)據(jù)庫SQL查詢
import sqlite3
def connect_to_database(database_path):connection = sqlite3.connect(database_path)return connection
def execute_query(connection, query):cursor = connection.cursor()cursor.execute(query)result = cursor.fetchall()return result
這段代碼的兩個函數(shù)分別用于連接數(shù)據(jù)庫及執(zhí)行SQL查詢。以下是代碼的逐行解釋:
-
導(dǎo)入sqlite3模塊:這行代碼導(dǎo)入了Python的
sqlite3
模塊,該模塊提供了一個輕量級的磁盤上數(shù)據(jù)庫,不需要單獨的服務(wù)器進程或系統(tǒng)配置。 -
connect_to_database函數(shù):接受一個參數(shù)
database_path
,它代表要連接的SQLite數(shù)據(jù)庫文件的路徑。 -
execute_query函數(shù):這個函數(shù)接受兩個參數(shù):connection:一個到SQLite數(shù)據(jù)庫的連接對象,通常是通過connect_to_database 函數(shù)獲得的。?query:一個SQL查詢字符串,你希望執(zhí)行這個查詢來從數(shù)據(jù)庫中檢索數(shù)據(jù)。?
使用示例:
# 連接到數(shù)據(jù)庫
conn = connect_to_database('example.db') # 創(chuàng)建一個新的表
create_table_query = '''
CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER
)
'''
execute_query(conn, create_table_query) # 插入一些數(shù)據(jù)
insert_data_query = '''
INSERT INTO users (name, age) VALUES (?, ?)
'''
execute_query(conn, insert_data_query, ('Alice', 30))
execute_query(conn, insert_data_query, ('Bob', 25)) # 查詢所有數(shù)據(jù)
select_all_query = 'SELECT * FROM users'
users = execute_query(conn, select_all_query)
for user in users: print(user) # 關(guān)閉連接
conn.close()
11. 系統(tǒng)進程查殺
import psutil
def get_running_processes():return [p.info for p in psutil.process_iter(['pid', 'name', 'username'])]
def kill_process_by_name(process_name):for p in psutil.process_iter(['pid', 'name', 'username']):if p.info['name'] == process_name:p.kill()
這段代碼使用了?psutil
?庫來查詢和管理操作系統(tǒng)中的進程。psutil
?是一個跨平臺庫,能夠獲取系統(tǒng)運行狀態(tài)信息,包括 CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)、進程等。代碼中定義了兩個函數(shù):
-
get_running_processes()
: 這個函數(shù)返回一個包含當(dāng)前運行的所有進程信息的列表。每個進程信息是一個字典,包含進程ID(pid)、進程名稱(name)和進程所屬用戶名(username)。? -
kill_process_by_name(process_name)
: 這個函數(shù)接受一個進程名稱作為參數(shù),并嘗試殺死(結(jié)束)所有與該名稱匹配的進程。
這里有一些要注意的點:
psutil.process_iter()
?函數(shù)用于遍歷系統(tǒng)中的所有進程。你可以通過傳遞一個字段列表來限制返回的信息量,這里我們只關(guān)心進程的 pid、name 和 username。p.info
?是一個字典,包含了進程的所有信息。我們通過?p.info['name']
?來獲取進程的名稱。p.kill()
?方法用于結(jié)束進程。這個方法會發(fā)送一個 SIGTERM 信號給進程,告訴它應(yīng)該優(yōu)雅地關(guān)閉。如果進程不響應(yīng),可能會發(fā)送一個 SIGKILL 信號來強制結(jié)束它。
請注意,結(jié)束進程(特別是你沒有權(quán)限結(jié)束的進程)可能會引發(fā)異常。在實際使用中,你可能需要添加適當(dāng)?shù)腻e誤處理邏輯來處理這些異常。
此外,使用?kill_process_by_name
?函數(shù)時要小心,因為它會無條件地殺死所有匹配的進程,這可能會導(dǎo)致不期望的行為。你可能需要添加一些額外的邏輯來確認你要結(jié)束的進程確實是你想要的,或者至少確保你不會意外地結(jié)束重要的系統(tǒng)進程。
12.圖像尺寸調(diào)整和裁剪
from PIL import Image
def resize_image(input_path, output_path, width, height):image = Image.open(input_path)resized_image = image.resize((width, height), Image.ANTIALIAS)resized_image.save(output_path)
def crop_image(input_path, output_path, left, top, right, bottom):image = Image.open(input_path)cropped_image = image.crop((left, top, right, bottom))cropped_image.save(output_path)
函數(shù) resize_image
?和?crop_image
?分別用于調(diào)整圖像的大小和裁剪圖像。這些函數(shù)都使用了Pillow庫(PIL),這是一個用于處理圖像的庫。
-
resize_image
?函數(shù):-
參數(shù):
input_path
:要調(diào)整大小的圖像的輸入路徑。output_path
:調(diào)整大小后的圖像的輸出路徑。width
:新圖像的寬度。height
:新圖像的高度。
-
功能:
- 打開位于?
input_path
?的圖像。 - 使用?
Image.ANTIALIAS
?作為重采樣方法,將圖像的大小調(diào)整為?width
?和?height
。ANTIALIAS 是一種高質(zhì)量的重采樣濾鏡,可以減少調(diào)整大小時產(chǎn)生的鋸齒狀邊緣。 - 保存調(diào)整大小后的圖像到?
output_path
。
- 打開位于?
-
-
crop_image
?函數(shù):-
參數(shù):
input_path
:要裁剪的圖像的輸入路徑。output_path
:裁剪后的圖像的輸出路徑。left
:裁剪框的左邊界。top
:裁剪框的上邊界。right
:裁剪框的右邊界。bottom
:裁剪框的下邊界。
-
功能:
- 打開位于?
input_path
?的圖像。 - 使用?
crop
?方法,根據(jù)提供的?left
、top
、right
?和?bottom
?邊界裁剪圖像。 - 保存裁剪后的圖像到?
output_path
。
- 打開位于?
-
這些函數(shù)為圖像處理提供了基本的功能,可以幫助你輕松地調(diào)整圖像的大小或裁剪圖像。
13.圖片添加水印
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
def add_watermark(input_path, output_path, watermark_text):image = Image.open(input_path)draw = ImageDraw.Draw(image)font = ImageFont.truetype('arial.ttf', 36)draw.text((10, 10), watermark_text, fill=(255, 255, 255, 128), font=font)image.save(output_path)
函數(shù)?add_watermark
?用于在給定的圖像上添加水印。水印是一個文本字符串,被放置在圖像的指定位置。這里使用了Python的Pillow庫(PIL的一個分支)來處理圖像。
以下是代碼的詳細解釋:
-
導(dǎo)入必要的模塊:
Image
: 用于打開、處理和保存多種格式的圖像文件。ImageDraw
: 提供了簡單的圖形繪制功能,用于在圖像上繪制。ImageFont
: 用于處理字體,這樣你就可以在圖像上繪制文本。
-
定義?
add_watermark
?函數(shù):input_path
: 要添加水印的原始圖像的路徑。output_path
: 添加水印后的圖像的保存路徑。watermark_text
: 要作為水印添加到圖像上的文本。
-
函數(shù)內(nèi)部邏輯:
image = Image.open(input_path)
: 打開位于?input_path
?的圖像文件。draw = ImageDraw.Draw(image)
: 創(chuàng)建一個可以在上面繪制的Draw
對象。font = ImageFont.truetype('arial.ttf', 36)
: 使用TrueType或OpenType字體文件創(chuàng)建一個字體對象。這里使用了Arial字體,大小為36。你需要確保arial.ttf
文件在你的工作目錄中,或者提供正確的路徑。draw.text((10, 10), watermark_text, fill=(255, 255, 255, 128), font=font)
: 在圖像上的位置(10, 10)
繪制水印文本。文本的顏色是白色(RGB值為(255, 255, 255)
),并且有一定的透明度(alpha值為128
)。image.save(output_path)
: 保存帶有水印的圖像到output_path
指定的路徑。
這個函數(shù)允許你簡單地為圖像添加水印,但你可能需要根據(jù)你的具體需求調(diào)整字體、大小、顏色、位置等參數(shù)。
14. 創(chuàng)建圖像縮略圖
from PIL import Image
def create_thumbnail(input_path, output_path, size=(128, 128)):image = Image.open(input_path)image.thumbnail(size)image.save(output_path)
這段代碼定義了一個名為 create_thumbnail 的函數(shù),用于創(chuàng)建一個指定大小的縮略圖。這個函數(shù)使用了 Python 的 Pillow 庫(PIL 的一個分支)來處理圖像。以下是代碼的詳細解釋:
- 導(dǎo)入 Image 類:from PIL import Image,這行代碼從 PIL 庫中導(dǎo)入了 Image 類,該類提供了打開、操作和保存圖像文件的方法。
- 定義 create_thumbnail 函數(shù),三個參數(shù)分別為:
* `input_path`: 輸入圖像的路徑。 ?
* `output_path`: 縮略圖圖像的保存路徑。 ?
* `size`: 縮略圖的大小,默認為 `(128, 128)`(即寬度為 128 像素,高度為 128 像素)。 - 打開輸入圖像:image = Image.open(input_path)
這行代碼使用 Image.open 方法打開位于 input_path 的圖像文件,并將其存儲在 image 變量中。 - 創(chuàng)建縮略圖:image.thumbnail(size)
這行代碼使用 Image 對象的 thumbnail 方法來創(chuàng)建縮略圖。thumbnail 方法會保持圖像的縱橫比,同時確保圖像的最大尺寸不超過 size 參數(shù)指定的寬度和高度。如果原始圖像的寬度和高度都小于 size,則圖像不會進行縮放。 - 保存縮略圖:image.save(output_path)
這行代碼將創(chuàng)建好的縮略圖保存到 output_path 指定的路徑。 - 調(diào)用示例:使用這個函數(shù),你可以輕松地為任何圖像創(chuàng)建一個指定大小的縮略圖。
例如:create_thumbnail('path/to/input.jpg', 'path/to/output.jpg', size=(200, 200))
這行代碼將創(chuàng)建一個最大尺寸為 200x200 像素的縮略圖,并將其保存到 'path/to/output.jpg'。?
15.PDF中提取文本
import PyPDF2
def extract_text_from_pdf(file_path):with open(file_path, 'rb') as f:pdf_reader = PyPDF2.PdfFileReader(f)text = ''for page_num in range(pdf_reader.numPages):page = pdf_reader.getPage(page_num)text += page.extractText()return text
這段代碼是一個用于從PDF文件中提取文本的函數(shù),使用了PyPDF2
庫。
- 導(dǎo)入
PyPDF2
庫。 - 定義函數(shù)
extract_text_from_pdf
,它接受一個參數(shù)file_path
,這是要從中提取文本的PDF文件的路徑。 - 使用
with open(file_path, 'rb') as f:
打開文件,'rb'
表示以二進制讀模式打開文件。 - 創(chuàng)建一個
PdfFileReader
對象pdf_reader
來讀取打開的PDF文件。 - 初始化一個空字符串
text
,用于存儲從PDF文件中提取的文本。 - 使用
for
循環(huán)遍歷PDF文件中的每一頁(range(pdf_reader.numPages)
生成一個從0到pdf_reader.numPages - 1
的整數(shù)序列)。 - 對于每一頁,使用
getPage(page_num)
方法獲取該頁的對象,然后使用extractText()
方法提取該頁的文本,并將其添加到text
字符串中。 - 函數(shù)最后返回存儲了所有提取文本的
text
字符串。
請注意,PyPDF2
的extractText()
方法可能無法完美地提取所有PDF文件中的文本,特別是對于那些包含復(fù)雜布局或特殊字體的文件。對于這種情況,可能需要使用其他更高級的PDF處理庫,如PDFMiner
或pdfplumber
。
16. 合并多個PDF文件
import PyPDF2
def merge_pdfs(input_paths, output_path): pdf_writer = PyPDF2.PdfFileWriter() for path in input_paths: with open(path, 'rb') as f: pdf_reader = PyPDF2.PdfFileReader(f) for page_num in range(pdf_reader.getNumPages()): page = pdf_reader.getPage(page_num) pdf_writer.addPage(page) with open(output_path, 'wb') as f: pdf_writer.write(f)
這段代碼使用PyPDF2
庫合并多個PDF文件。函數(shù)?merge_pdfs
接受一個包含多個PDF文件路徑的列表input_paths
和一個輸出文件路徑output_path
。然后,它遍歷輸入文件列表,讀取每個文件,并將每一頁添加到一個PdfFileWriter
對象中。最后,它將所有頁面寫入到指定的輸出文件中。以下是這段代碼的逐行解釋:
-
import PyPDF2
導(dǎo)入PyPDF2
庫,這是一個用于處理PDF文件的Python庫。 -
def merge_pdfs(input_paths, output_path):
定義一個名為merge_pdfs
的函數(shù),它接受兩個參數(shù):一個包含多個PDF文件路徑的列表input_paths
和一個輸出文件路徑output_path
。 -
pdf_writer = PyPDF2.PdfFileWriter()
創(chuàng)建一個PdfFileWriter
對象,該對象將用于寫入合并后的PDF文件的內(nèi)容。 -
for path in input_paths:
遍歷input_paths
列表中的每個文件路徑。 -
with open(path, 'rb') as f:
使用with
語句打開當(dāng)前路徑下的PDF文件,'rb'
表示以二進制讀模式打開文件。文件對象存儲在變量f
中。 -
pdf_reader = PyPDF2.PdfFileReader(f)
創(chuàng)建一個PdfFileReader
對象來讀取打開的PDF文件。 -
for page_num in range(pdf_reader.getNumPages()):
遍歷當(dāng)前PDF文件的每一頁。getNumPages()
方法返回PDF文件中的頁面數(shù)量。 -
page = pdf_reader.getPage(page_num)
使用getPage
方法獲取當(dāng)前頁碼對應(yīng)的頁面對象。 -
pdf_writer.addPage(page)
將獲取到的頁面對象添加到PdfFileWriter
對象中,以便稍后寫入到輸出文件中。 -
with open(output_path, 'wb') as f:
使用with
語句打開(或創(chuàng)建)輸出文件,準備以二進制寫模式寫入合并后的PDF內(nèi)容。 -
pdf_writer.write(f)
將PdfFileWriter
對象中的所有頁面寫入到輸出文件中。
當(dāng)你調(diào)用這個函數(shù)并傳入一個PDF文件路徑列表和一個輸出文件路徑時,它將讀取所有輸入文件,并將它們的頁面合并到一個單一的輸出文件中。請確保你安裝了PyPDF2
庫(使用pip install PyPDF2
),并且輸入的PDF文件都是有效的。
完