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'
表示只讀模式。如果你想要寫(xiě)入文件,可以使用'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è)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
a | 打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
rb | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。文件指針將會(huì)放在文件的開(kāi)頭。這是默認(rèn)模式。 |
wb | 以二進(jìn)制格式打開(kāi)一個(gè)文件只用于寫(xiě)入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
ab | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。也就是說(shuō),新的內(nèi)容將會(huì)被寫(xiě)入到已有內(nèi)容之后。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入。 |
r+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭。 |
w+ | 打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。 |
a+ | 打開(kāi)一個(gè)文件用于讀寫(xiě),如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。文件打開(kāi)時(shí)會(huì)是追加模式。如果改文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
rb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。文件指針將會(huì)放在文件的開(kāi)頭 |
wb+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。如果改文件已存在則會(huì)覆蓋。如果改文件不存在,創(chuàng)建新文件。 |
ab+ | 以二進(jìn)制格式打開(kāi)一個(gè)文件用于追加。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾。如果改文件不存在,創(chuàng)建新文件用于讀寫(xiě)。 |
二、文件讀寫(xiě)
1. 寫(xiě)數(shù)據(jù)(write)
寫(xiě)入數(shù)據(jù)通常涉及將信息保存到文件、數(shù)據(jù)庫(kù)或其他持久性存儲(chǔ)介質(zhì)中。以下是一些常見(jiàn)的數(shù)據(jù)寫(xiě)入場(chǎng)景的示例:
1.1 寫(xiě)入文本文件
使用內(nèi)置的 open
函數(shù)來(lái)打開(kāi)文件并寫(xiě)入內(nèi)容。確保使用適當(dāng)?shù)哪J剑ɡ纾?code>'w' 表示寫(xiě)入)。
file_path = 'example.txt' # 寫(xiě)入文件 with open(file_path, 'w') as file: file.write("Hello, this is some data.")
1.2 寫(xiě)入CSV文件
使用 csv
模塊來(lái)寫(xiě)入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 寫(xiě)入JSON文件
使用內(nèi)置的 json
模塊來(lái)寫(xiě)入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 寫(xiě)入數(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ù)表示以寫(xiě)入模式打開(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)容寫(xiě)回文件 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-12python實(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-10python 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-11python 實(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-03python使用OS模塊操作系統(tǒng)接口及常用功能詳解
os是?Python?標(biāo)準(zhǔn)庫(kù)中的一個(gè)模塊,提供了與操作系統(tǒng)交互的功能,在本節(jié)中,我們將介紹os模塊的一些常用功能,并通過(guò)實(shí)例代碼詳細(xì)講解每個(gè)知識(shí)點(diǎn)2023-06-06python騰訊語(yǔ)音合成實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了python騰訊語(yǔ)音合成實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python自動(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