Python基礎(chǔ)文件操作方法超詳細(xì)講解(詳解版)
一、文件操作
1. 文件打開(kāi)與關(guān)閉
1.1 打開(kāi)文件
在Python中,你可以使用 open() 函數(shù)來(lái)打開(kāi)文件。
以下是一個(gè)簡(jiǎn)單的例子:
# 打開(kāi)文件(默認(rèn)為只讀模式)
file_path = 'example.txt'
with open(file_path, 'r') as file:
# 執(zhí)行文件操作,例如讀取文件內(nèi)容
file_content = file.read()
print(file_content)
# 文件在with塊結(jié)束后會(huì)自動(dòng)關(guān)閉,無(wú)需顯式關(guān)閉文件
在上述示例中:
'example.txt'是文件的路徑和名稱,你可以根據(jù)實(shí)際情況修改為你想要打開(kāi)的文件。'r'表示只讀模式。如果你想要寫入文件,可以使用'w'模式,如果想要追加內(nèi)容,可以使用'a'模式等。with open(...) as file: 是使用上下文管理器的方式,確保文件在使用后被正確關(guān)閉,即使在處理文件時(shí)發(fā)生異常也能保證關(guān)閉。
1.2 關(guān)閉文件
在 Python 中關(guān)閉文件有兩種主要的方法:
1.2.1 使用 with 語(yǔ)句
with 語(yǔ)句是一種上下文管理器,當(dāng)它的代碼塊執(zhí)行完畢時(shí),會(huì)自動(dòng)關(guān)閉文件。這是推薦的方式,因?yàn)樗_保文件在使用完畢后被正確關(guān)閉,即使發(fā)生異常也能保證關(guān)閉。
file_path = 'example.txt'
with open(file_path, 'r') as file:
# 執(zhí)行文件操作,例如讀取文件內(nèi)容
file_content = file.read()
print(file_content)
# 文件在這里已經(jīng)被自動(dòng)關(guān)閉
1.2.2 使用 close() 方法:
你可以顯式調(diào)用文件對(duì)象的 close() 方法來(lái)關(guān)閉文件。這種方法適用于一些特殊情況,但相對(duì)來(lái)說(shuō)不如 with 語(yǔ)句簡(jiǎn)潔和安全。
file_path = 'example.txt'
file = open(file_path, 'r')
try:
# 執(zhí)行文件操作,例如讀取文件內(nèi)容
file_content = file.read()
print(file_content)
finally:
file.close()
在使用 with 語(yǔ)句時(shí),不需要顯式調(diào)用 close() 方法。如果你在代碼中打開(kāi)了文件而沒(méi)有使用 with,請(qǐng)確保在適當(dāng)?shù)牡胤秸{(diào)用 close() 以關(guān)閉文件,以避免資源泄漏。
2. 訪問(wèn)模式及說(shuō)明
| 訪問(wèn)模式 | 說(shuō)明 |
|---|---|
| r | 以只讀方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
| w | 打開(kāi)一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
| a | 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。 |
| rb | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
| wb | 以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
| ab | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入。 |
| r+ | 打開(kāi)一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開(kāi)頭。 |
| w+ | 打開(kāi)一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
| a+ | 打開(kāi)一個(gè)文件用于讀寫,如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果改文件不存在,創(chuàng)建新文件用于讀寫。 |
| rb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫。文件指針將會(huì)放在文件的開(kāi)頭 |
| wb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫。如果改文件已存在則會(huì)覆蓋。如果改文件不存在,創(chuàng)建新文件。 |
| ab+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果改文件不存在,創(chuàng)建新文件用于讀寫。 |
二、文件讀寫
1. 寫數(shù)據(jù)(write)
寫入數(shù)據(jù)通常涉及將信息保存到文件、數(shù)據(jù)庫(kù)或其他持久性存儲(chǔ)介質(zhì)中。以下是一些常見(jiàn)的數(shù)據(jù)寫入場(chǎng)景的示例:
1.1 寫入文本文件
使用內(nèi)置的 open 函數(shù)來(lái)打開(kāi)文件并寫入內(nèi)容。確保使用適當(dāng)?shù)哪J剑ɡ纾?code>'w' 表示寫入)。
file_path = 'example.txt'
# 寫入文件
with open(file_path, 'w') as file:
file.write("Hello, this is some data.")
1.2 寫入CSV文件
使用 csv 模塊來(lái)寫入CSV格式的文件。
import csv
csv_file_path = 'example.csv'
data = [['Name', 'Age', 'Occupation'],
['John Doe', 30, 'Engineer'],
['Jane Smith', 25, 'Designer']]
with open(csv_file_path, 'w', newline='') as csvfile:
csv_writer = csv.writer(csvfile)
csv_writer.writerows(data)
1.3 寫入JSON文件
使用內(nèi)置的 json 模塊來(lái)寫入JSON格式的文件。
import json
json_file_path = 'example.json'
data = {"name": "John Doe", "age": 30, "occupation": "Engineer"}
with open(json_file_path, 'w') as jsonfile:
json.dump(data, jsonfile)
1.4 寫入數(shù)據(jù)庫(kù)
使用數(shù)據(jù)庫(kù)連接庫(kù)(如 sqlite3、mysql-connector-python 等)與相應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行交互。
import sqlite3
# 連接到SQLite數(shù)據(jù)庫(kù)(假設(shè)有一個(gè)名為 example.db 的數(shù)據(jù)庫(kù))
conn = sqlite3.connect('example.db')
# 創(chuàng)建一個(gè)游標(biāo)對(duì)象
cursor = conn.cursor()
# 執(zhí)行SQL插入語(yǔ)句
cursor.execute("INSERT INTO users (name, age, occupation) VALUES (?, ?, ?)", ('John Doe', 30, 'Engineer'))
# 提交更改
conn.commit()
# 關(guān)閉連接
conn.close()
2. 讀數(shù)據(jù)(read)
讀取數(shù)據(jù)通常涉及從文件、數(shù)據(jù)庫(kù)或其他存儲(chǔ)介質(zhì)中檢索信息。以下是一些讀取數(shù)據(jù)的常見(jiàn)示例:
2.1 讀取文本文件
使用內(nèi)置的 open 函數(shù)來(lái)打開(kāi)文件并讀取內(nèi)容。
file_path = 'example.txt'
# 讀取文件
with open(file_path, 'r') as file:
data = file.read()
print(data)
2.2 讀取CSV文件
使用 csv 模塊來(lái)讀取CSV格式的文件。
import csv
csv_file_path = 'example.csv'
# 讀取CSV文件
with open(csv_file_path, 'r') as csvfile:
csv_reader = csv.reader(csvfile)
for row in csv_reader:
print(row)
2.3 讀取JSON文件
使用內(nèi)置的 json 模塊來(lái)讀取JSON格式的文件。
import json
json_file_path = 'example.json'
# 讀取JSON文件
with open(json_file_path, 'r') as jsonfile:
data = json.load(jsonfile)
print(data)
2.4 從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù)
使用數(shù)據(jù)庫(kù)連接庫(kù)(如 sqlite3、mysql-connector-python 等)與相應(yīng)的數(shù)據(jù)庫(kù)進(jìn)行交互。
import sqlite3
# 連接到SQLite數(shù)據(jù)庫(kù)(假設(shè)有一個(gè)名為 example.db 的數(shù)據(jù)庫(kù))
conn = sqlite3.connect('example.db')
# 創(chuàng)建一個(gè)游標(biāo)對(duì)象
cursor = conn.cursor()
# 執(zhí)行SQL查詢語(yǔ)句
cursor.execute("SELECT * FROM users")
# 檢索所有行
rows = cursor.fetchall()
# 打印每一行
for row in rows:
print(row)
# 關(guān)閉連接
conn.close()
2. 讀數(shù)據(jù)(readlines)
readlines 是 Python 中用于讀取文件的方法之一,它用于逐行讀取文件內(nèi)容,并將每一行作為字符串存儲(chǔ)在一個(gè)列表中。下面是對(duì) readlines 方法的詳細(xì)解釋:
使用 readlines 方法的基本語(yǔ)法
with open('file.txt', 'r') as file:
lines = file.readlines()
解釋:
open('file.txt', 'r'): 打開(kāi)文件'file.txt'以供讀取。第一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是打開(kāi)文件的模式。'r'表示只讀模式。with ... as ...: 使用with語(yǔ)句可以確保在讀取完成后自動(dòng)關(guān)閉文件,不需要顯式調(diào)用file.close()。lines = file.readlines():readlines方法用于讀取文件的所有行,并將每一行作為一個(gè)字符串存儲(chǔ)在列表lines中。每個(gè)列表元素對(duì)應(yīng)文件中的一行文本。你可以使用列表索引來(lái)訪問(wèn)特定行,例如
lines[0]表示文件的第一行。
例子:假設(shè) ‘file.txt’ 包含以下內(nèi)容:
Hello, this is line 1. This is line 2. And this is line 3.
使用 readlines 后:
with open('file.txt', 'r') as file:
lines = file.readlines()
# lines 現(xiàn)在是一個(gè)包含每一行文本的列表
print(lines)
# 輸出:
# ['Hello, this is line 1.\n', 'This is line 2.\n', 'And this is line 3.\n']
# 訪問(wèn)特定行
print(lines[0].strip()) # 輸出:Hello, this is line 1.
注意事項(xiàng):
每一行的末尾都包含換行符
\n,你可以使用strip()方法去除這些額外的空白字符。readlines方法適用于處理包含多行文本的文件,但對(duì)于大型文件,可能需要考慮逐行讀取而不是將整個(gè)文件加載到內(nèi)存中。這可以通過(guò)循環(huán)遍歷文件對(duì)象來(lái)實(shí)現(xiàn),而不是使用readlines。
3. 讀數(shù)據(jù)(readline)
readline 是 Python 中用于讀取文件的方法之一,它用于逐行讀取文件內(nèi)容,并返回文件中的一行作為字符串。以下是對(duì) readline 方法的詳細(xì)解釋:
使用 readline 方法的基本語(yǔ)法
with open('file.txt', 'r') as file:
line = file.readline()
解釋:
open('file.txt', 'r'): 打開(kāi)文件'file.txt'以供讀取。第一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是打開(kāi)文件的模式。'r'表示只讀模式。with ... as ...: 使用with語(yǔ)句可以確保在讀取完成后自動(dòng)關(guān)閉文件,不需要顯式調(diào)用file.close()。line = file.readline():readline方法用于讀取文件的一行,并將該行作為一個(gè)字符串存儲(chǔ)在變量line中。
例子:假設(shè) ‘file.txt’ 包含以下內(nèi)容:
Hello, this is line 1. This is line 2. And this is line 3.
使用 readline 后:
with open('file.txt', 'r') as file:
line1 = file.readline()
line2 = file.readline()
line3 = file.readline()
print(line1) # 輸出:Hello, this is line 1.
print(line2) # 輸出:This is line 2.
print(line3) # 輸出:And this is line 3.
注意事項(xiàng):
每個(gè)
readline調(diào)用都會(huì)讀取文件的下一行。返回的字符串包含行末尾的換行符
\n。如果不需要換行符,可以使用strip()方法去除它。當(dāng)文件讀取完畢后,
readline將返回空字符串 ‘’,因此可以在循環(huán)中使用while line != ''來(lái)逐行讀取整個(gè)文件。
循環(huán)讀取整個(gè)文件:
with open('file.txt', 'r') as file:
line = file.readline()
while line != '':
print(line.strip()) # 去除換行符
line = file.readline()
這個(gè)循環(huán)將逐行讀取整個(gè)文件,直到文件末尾。
4. readlines 和 readline的區(qū)別
readlines 和 readline 是 Python 中用于讀取文件的兩種不同方法,它們之間有一些重要的區(qū)別:
4.1 readlines 方法:
返回類型:
readlines方法返回一個(gè)包含文件所有行的列表,其中每個(gè)元素都是文件中的一行文本字符串。使用情況: 適用于處理包含多行文本的文件,可以一次性將整個(gè)文件加載到內(nèi)存中。這種方法適用于文件較小,可以完全裝入內(nèi)存的情況。
例子:
with open('file.txt', 'r') as file:
lines = file.readlines()`
4.2 readline 方法:
返回類型:
readline方法每次調(diào)用只返回文件中的一行作為字符串。如果再次調(diào)用,將返回下一行。當(dāng)文件讀取完畢后,返回空字符串 ‘’。使用情況: 適用于逐行處理大型文件,可以有效地降低內(nèi)存使用。因?yàn)樗淮沃蛔x取一行,可以在循環(huán)中逐行處理文件,而不必將整個(gè)文件加載到內(nèi)存中。
例子:
with open('file.txt', 'r') as file:
line = file.readline()
while line != '':
print(line.strip()) # 去除換行符
line = file.readline()
4.3 區(qū)別總結(jié):
readlines一次性讀取整個(gè)文件的所有行,并返回一個(gè)包含所有行的列表。readline逐行讀取文件,每次調(diào)用返回文件中的一行,適用于處理大型文件,減少內(nèi)存占用。readlines返回包含換行符的每一行,而readline返回單獨(dú)的行,需要手動(dòng)去除換行符。
選擇使用哪個(gè)方法取決于文件的大小和處理需求。如果文件較小,可以完全裝入內(nèi)存,使用 readlines;如果文件較大,可以逐行處理,使用 readline。
三、文件的相關(guān)操作
1. 文件重命名
Python 文件重命名是文件管理中的一個(gè)基本操作,可以通過(guò) Python 的內(nèi)置庫(kù)來(lái)實(shí)現(xiàn)。以下是一個(gè)超詳細(xì)的入門指南,介紹如何使用 Python 重命名文件:
1.2 導(dǎo)入必要的庫(kù)
首先,您需要導(dǎo)入 Python 的 os 庫(kù),它提供了許多與操作系統(tǒng)交互的函數(shù)。
import os
1.2 準(zhǔn)備文件列表
要重命名文件,您需要先列出指定目錄中的所有文件??梢允褂?nbsp;os.listdir() 函數(shù)來(lái)獲取目錄中的文件列表。
# 列出指定目錄中的所有文件和文件夾
files = os.listdir('path_to_directory')
1.3 遍歷文件列表
接著,您需要遍歷文件列表,對(duì)每一個(gè)文件進(jìn)行重命名。
for file in files:
# 獲取文件的完整路徑
full_path = os.path.join('path_to_directory', file)
# 檢查是否是文件
if os.path.isfile(full_path):
# 新的文件名
new_filename = 'new_name'
# 重命名操作
os.rename(full_path, os.path.join('path_to_directory', new_filename))
print(f'Renamed {file} to {new_filename}')
1.4 異常處理
在重命名文件時(shí),可能會(huì)出現(xiàn)各種異常,例如目標(biāo)文件已存在、沒(méi)有足夠權(quán)限等。為了確保程序的健壯性,應(yīng)該添加異常處理。
try:
for file in files:
# ...(上面的代碼)
except OSError as e:
print(f'Error occurred: {e}')
1.5 完整的腳本示例
import os
# 指定要重命名文件的目錄
directory = 'path_to_directory'
# 列出目錄中的所有文件
files = os.listdir(directory)
# 遍歷文件列表并進(jìn)行重命名
for file in files:
if os.path.isfile(os.path.join(directory, file)):
# 設(shè)定新的文件名
new_filename = 'new_name'
# 重命名文件
try:
os.rename(
os.path.join(directory, file),
os.path.join(directory, new_filename)
)
print(f'Renamed {file} to {new_filename}')
except OSError as e:
print(f'Error renaming {file}: {e}')
1.6 注意安全性和效率
在批量重命名文件時(shí),應(yīng)確保:
不要同時(shí)進(jìn)行多個(gè)重命名操作,以避免潛在的競(jìng)爭(zhēng)條件。
確保目標(biāo)目錄存在,避免在重命名時(shí)創(chuàng)建不存在的目錄。
考慮到操作系統(tǒng)對(duì)文件重命名的限制,例如在 Windows 中,文件名不能超過(guò) 255 個(gè)字符,而在 Unix/Linux 中則沒(méi)有這個(gè)限制。
1.7 高級(jí)用法
對(duì)于更復(fù)雜的重命名任務(wù),您可以使用正則表達(dá)式或者其他文本處理方法來(lái)生成新的文件名。
import os
import re
# 指定目錄
directory = 'path_to_directory'
# 列出目錄中的所有文件
files = os.listdir(directory)
# 遍歷文件列表并進(jìn)行重命名
for file in files:
if os.path.isfile(os.path.join(directory, file)):
# 使用正則表達(dá)式匹配文件名模式,并替換為新的模式
new_filename = re.sub(r'\d+', 'new_prefix', file)
# 重命名文件
try:
os.rename(
os.path.join(directory, file),
os.path.join(directory, new_filename)
)
print(f'Renamed {file} to {new_filename}')
except OSError as e:
print(f'Error renaming {file}: {e}')
這個(gè)腳本會(huì)將指定目錄中所有以數(shù)字開(kāi)頭的文件重命名為新的前綴。
2. 刪除文件
在Python中,刪除文件是一個(gè)相對(duì)簡(jiǎn)單的操作。我們可以使用os庫(kù)中的os.remove()函數(shù)來(lái)實(shí)現(xiàn)。以下是一個(gè)超詳細(xì)的入門指南,介紹如何使用Python刪除文件:
2.1 導(dǎo)入必要的庫(kù)
首先,您需要導(dǎo)入Python的 os 庫(kù),它提供了許多與操作系統(tǒng)交互的函數(shù)。
import os
2.2 準(zhǔn)備文件路徑
要?jiǎng)h除文件,您需要知道要?jiǎng)h除的文件的路徑。
file_path = 'path_to_file'
2.3 檢查文件是否存在
在刪除文件之前,最好檢查該文件是否存在,以避免錯(cuò)誤。
if os.path.isfile(file_path):
print(f'File {file_path} exists, proceed to delete.')
else:
print(f'File {file_path} does not exist, skip deletion.')
**2.4 執(zhí)行刪除操作
如果文件存在,您可以使用 os.remove() 函數(shù)來(lái)刪除它。
try:
os.remove(file_path)
print(f'File {file_path} deleted successfully.')
except OSError as e:
print(f'Error occurred: {e}')
2.5 完整的腳本示例
import os
# 指定要?jiǎng)h除的文件的目錄
file_path = 'path_to_file'
# 檢查文件是否存在
if os.path.isfile(file_path):
print(f'File {file_path} exists, proceed to delete.')
else:
print(f'File {file_path} does not exist, skip deletion.')
# 執(zhí)行刪除操作
try:
os.remove(file_path)
print(f'File {file_path} deleted successfully.')
except OSError as e:
print(f'Error occurred: {e}')
2.6 注意安全性和效率
在批量刪除文件時(shí),應(yīng)確保:
不要同時(shí)進(jìn)行多個(gè)刪除操作,以避免潛在的競(jìng)爭(zhēng)條件。
確保目標(biāo)目錄存在,避免在刪除時(shí)創(chuàng)建不存在的目錄。
考慮到操作系統(tǒng)對(duì)文件刪除的操作限制,例如在 Windows 中,文件名不能超過(guò) 255 個(gè)字符,而在 Unix/Linux 中則沒(méi)有這個(gè)限制。
通過(guò)以上步驟,您應(yīng)該能夠掌握如何使用Python刪除文件。
3. 創(chuàng)建文件
在Python中,創(chuàng)建文件是一個(gè)相對(duì)簡(jiǎn)單的操作。我們可以使用 os 庫(kù)中的 os.open() 函數(shù)或者 with 語(yǔ)句來(lái)創(chuàng)建文件。以下是一個(gè)超詳細(xì)的入門指南,介紹如何使用Python創(chuàng)建文件:
3.1 導(dǎo)入必要的庫(kù)
首先,您需要導(dǎo)入Python的 os 庫(kù),它提供了許多與操作系統(tǒng)交互的函數(shù)。
import os
3.2 準(zhǔn)備文件路徑
要?jiǎng)?chuàng)建文件,您需要知道要?jiǎng)?chuàng)建的文件的路徑。
file_path = 'path_to_file'
3.3 檢查文件路徑是否存在
在創(chuàng)建文件之前,最好檢查該文件路徑是否存在,以避免覆蓋其他文件。
if not os.path.exists(file_path):
print(f'File path {file_path} does not exist, proceed to create.')
else:
print(f'File path {file_path} already exists, skip creation.')
3.4 執(zhí)行創(chuàng)建操作
如果文件路徑不存在,您可以使用 os.open() 函數(shù)來(lái)創(chuàng)建文件。
try:
with open(file_path, 'w') as f:
print(f'File {file_path} created successfully.')
except IOError as e:
print(f'Error occurred: {e}')
這里,我們使用 with 語(yǔ)句來(lái)確保文件在操作完成后會(huì)被正確關(guān)閉。'w' 參數(shù)表示以寫入模式打開(kāi)文件,如果文件不存在,會(huì)創(chuàng)建一個(gè)新文件。
3.5 完整的腳本示例
import os
# 指定要?jiǎng)?chuàng)建的文件的目錄
file_path = 'path_to_file'
# 檢查文件路徑是否存在
if not os.path.exists(file_path):
print(f'File path {file_path} does not exist, proceed to create.')
else:
print(f'File path {file_path} already exists, skip creation.')
# 執(zhí)行創(chuàng)建操作
try:
with open(file_path, 'w') as f:
print(f'File {file_path} created successfully.')
except IOError as e:
print(f'Error occurred: {e}')
3.6 注意安全性和效率
在創(chuàng)建文件時(shí),應(yīng)確保:
擁有創(chuàng)建文件的足夠權(quán)限。
避免在內(nèi)存不足的情況下創(chuàng)建大型文件。
通過(guò)以上步驟,您應(yīng)該能夠掌握如何使用Python創(chuàng)建文件。
4. 獲取當(dāng)前目錄
在Python中,我們可以使用 os 庫(kù)中的 os.getcwd() 函數(shù)來(lái)獲取當(dāng)前目錄的路徑。以下是一個(gè)示例:
import os
current_directory = os.getcwd()
print(f'Current directory is: {current_directory}')
這將會(huì)打印出當(dāng)前Python腳本所在目錄的路徑。
四、示例
1. 目錄.txt自動(dòng)清洗
1.1 需要在二級(jí)標(biāo)題所在行最前面空4個(gè)格子,一級(jí)標(biāo)題不用
1.2 需要在章和節(jié)字的后面加上一個(gè)空格
1.3 需要在頁(yè)碼前面加上=>符號(hào)
# 獲取桌面路徑
import os
import re
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
# 目標(biāo)文件路徑
file_path = os.path.join(desktop_path, "目錄.txt")
# 打開(kāi)文件并讀取內(nèi)容
with open(file_path, 'r', encoding='utf-8') as file:
lines = file.readlines()
modified_lines = []
for line in lines:
# 去除空格
line = line.replace(" ", "")
if len(line) == 1:
continue
# 使用正則表達(dá)式在'章'或'節(jié)'后面添加一個(gè)空格,僅在后面沒(méi)有空格的情況下
line = re.sub(r'(章|節(jié))(?![ ])', r'\1 ', line)
# 在小數(shù)點(diǎn)后添加空格
line = re.sub(r'(\.\d)', r'\1 ', line)
if '章' not in line:
# 二級(jí)標(biāo)題添加4個(gè)空格
line = ' ' * 4 + line
# 匹配并去除最外層的英文括號(hào)
pattern_en = r'\(([\d\s]+)\)'
line = re.sub(pattern_en, r'\1', line)
# 匹配并去除最外層的中文括號(hào)及其內(nèi)部?jī)?nèi)容(包括除數(shù)字和空格以外的字符)
pattern = r'(([^)]+))'
line = re.sub(pattern, r'\1', line)
# 確保每行只有一個(gè) =>
if '=>' not in line:
# 在頁(yè)碼數(shù)字前添加 =>(只在行尾)
line = re.sub(r'(\d+)$', r'=>\1', line)
# 去除中文漢字和'=>整體符號(hào)左邊的冗余符號(hào)
pattern = r'([\u4e00-\u9fff]+)[^\w\s]+=>'
line = re.sub(pattern, r'\1=>', line)
modified_lines.append(line)
# 將修改后的內(nèi)容寫回文件
with open(file_path, 'w', encoding='utf-8') as file:
file.writelines(modified_lines)
# 讀取文件內(nèi)容
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
print(content)
2. 批量修改文件夾下的文件命名
你可以使用 Python 的 os 模塊來(lái)實(shí)現(xiàn)對(duì)文件名的批量修改,結(jié)合字符串操作來(lái)確保文件名中的規(guī)定格式。以下是一個(gè)示例代碼:
import os
# 指定目錄路徑
directory_path = r'目標(biāo)文件夾絕對(duì)路徑'
# 獲取目錄下所有文件名
files = os.listdir(directory_path)
# 遍歷文件
for file_name in files:
# 構(gòu)建完整的文件路徑
file_path = os.path.join(directory_path, file_name)
# 檢查文件是否是圖片文件,并且文件名中包含下劃線
if file_name.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')) and '_' in file_name:
# 分割文件名,以下劃線為界
parts = file_name.split('_')
# 確保分割后的第一部分為'00159231127'
if parts[0] != '00159231127':
# 構(gòu)建新文件名
new_file_name = '00159231127' + '_' + '_'.join(parts[1:])
# 構(gòu)建新文件路徑
new_file_path = os.path.join(directory_path, new_file_name)
# 重命名文件
os.rename(file_path, new_file_path)
print(f'Renamed: {file_name} -> {new_file_name}')
在上述代碼中:
1.使用 os.listdir 獲取目錄下的所有文件名,然后遍歷這些文件名。
2.通過(guò) os.path.join 構(gòu)建完整的文件路徑,確保路徑的正確性。
3.檢查文件是否是圖片文件(以 .png, .jpg, .jpeg, .gif 結(jié)尾的文件),并且文件名中包含下劃線。
4.使用 split('_') 分割文件名,確保分割后的第一部分為'00159231127'。
5.構(gòu)建新文件名,并使用 os.rename 來(lái)重命名文件。
在運(yùn)行前,請(qǐng)確保備份文件或者在測(cè)試環(huán)境中運(yùn)行,以免意外損壞文件。
3. 檢測(cè)同級(jí)目錄下是否存在同名文件夾
檢測(cè) 目標(biāo)路徑 下的文件夾命名前5位是否存在一樣的,如果一樣打印出來(lái)
你可以使用 Python 來(lái)檢查指定目錄下的文件夾,查找前5位命名相同的文件夾。以下是一個(gè)示例代碼:
import os
# 指定目錄路徑
directory_path = r'目標(biāo)路徑'
# 獲取目錄下所有文件夾名
folders = [folder for folder in os.listdir(directory_path) if os.path.isdir(os.path.join(directory_path, folder))]
# 創(chuàng)建一個(gè)空字典,用于存儲(chǔ)前5位相同的文件夾名
same_prefix_folders = {}
# 遍歷文件夾
for folder in folders:
# 獲取前5位文件夾名
prefix = folder[:5]
# 檢查前5位文件夾名是否已經(jīng)在字典中
if prefix in same_prefix_folders:
# 將文件夾名添加到對(duì)應(yīng)的鍵值中
same_prefix_folders[prefix].append(folder)
else:
# 若字典中沒(méi)有該前5位文件夾名,則創(chuàng)建鍵值對(duì)
same_prefix_folders[prefix] = [folder]
# 輸出前5位相同的文件夾名
for prefix, folders in same_prefix_folders.items():
if len(folders) > 1:
print(f"前5位為 '{prefix}' 的文件夾有以下重復(fù)命名:")
print(', '.join(folders))
這段代碼執(zhí)行以下操作:
1.使用 os.listdir 獲取指定目錄下的所有文件夾名。
2.然后遍歷這些文件夾名,提取前 5 位名稱,并將具有相同前綴的文件夾放入一個(gè)字典中。
3.最后打印出前 5 位相同的文件夾名。
總結(jié)
到此這篇關(guān)于Python基礎(chǔ)文件操作方法超詳細(xì)講解的文章就介紹到這了,更多相關(guān)Python基礎(chǔ)文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python實(shí)現(xiàn)電影售票系統(tǒng)
這篇文章主要介紹了通過(guò)Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的電影售票系統(tǒng),文中的示例代碼對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12
python實(shí)現(xiàn)樹(shù)的深度優(yōu)先遍歷與廣度優(yōu)先遍歷詳解
這篇文章主要介紹了python實(shí)現(xiàn)樹(shù)的深度優(yōu)先遍歷與廣度優(yōu)先遍歷,詳細(xì)分析了樹(shù)的深度優(yōu)先遍歷與廣度優(yōu)先遍歷原理及Python相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-10-10
python scrapy拆解查看Spider類爬取優(yōu)設(shè)網(wǎng)極細(xì)講解
本篇博客為你帶來(lái) scrapy.Spider 模塊中的相關(guān)函數(shù)與類,帶你再一次認(rèn)識(shí) scrapy 的細(xì)節(jié)。本次采集的目標(biāo)站點(diǎn)為:優(yōu)設(shè)網(wǎng),有需要的朋友可以借鑒參考下2021-11-11
python 實(shí)現(xiàn)format進(jìn)制轉(zhuǎn)換與刪除進(jìn)制前綴
這篇文章主要介紹了python 實(shí)現(xiàn)format進(jìn)制轉(zhuǎn)換與刪除進(jìn)制前綴的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
python使用OS模塊操作系統(tǒng)接口及常用功能詳解
os是?Python?標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,提供了與操作系統(tǒng)交互的功能,在本節(jié)中,我們將介紹os模塊的一些常用功能,并通過(guò)實(shí)例代碼詳細(xì)講解每個(gè)知識(shí)點(diǎn)2023-06-06
python騰訊語(yǔ)音合成實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了python騰訊語(yǔ)音合成實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Python自動(dòng)化測(cè)試selenium指定截圖文件名的方法
這篇文章主要介紹了Python自動(dòng)化測(cè)試selenium指定截圖文件名方法,Selenium 支持 Web 瀏覽器的自動(dòng)化,它提供一套測(cè)試函數(shù),用于支持 Web 自動(dòng)化測(cè)試,下文基于python實(shí)現(xiàn)指定截圖文件名方法,需要的小伙伴可以參考一下2025-02-02

