IN5. Working with Files +讀檔操作

更新於 發佈於 閱讀時間約 6 分鐘

題目連結


讀入一個充滿文字的檔案

按照1-based 索引取出偶數行(第2、4、6... 行)


程式碼:

with open("IN5.txt", "r", encoding="utf-8") as file:
lines = file.readlines()
for i, line in enumerate(lines, start=1): # 索引從1(第一行)開始,以符合直覺
if i % 2 == 0:
print(line.strip())

僅印出偶數行的文字即可




---

Python讀檔操作

這邊首先複習一下Python讀檔操作的幾種姿勢:

創建一個example.txt

Hello
World
Python


:一次讀全部,讀進來變成大字串。適合小型文件

with open("example.txt", "r", encoding="utf-8") as file:
content = file.read() # 一次讀全部

print(content)

# Hello
# World
# Python​

2:一次讀全部,讀近來變成列表。適合小型文件

2-1:去除換行符號

with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines() # 讀取所有行,回傳 list

for line in lines:
print(line.strip()) # strip() 移除換行符號

# Hello
# World
# Python

2-2:不去除換行符號

with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines() # 讀取所有行,回傳 list

for line in lines:
print(line)

# Hello

# World

# Python

為何會多一個換行?因為print()函式在行尾會自動加上換行字元

所以2-1是把文件原本的\n去除掉,就只會印出一行換行

2-3:印出原始字符

with open("example.txt", "r", encoding="utf-8") as file:
lines = file.readlines() # 讀取所有行,回傳 list

for line in lines:
print(repr(line)) # 讀取格式字符

# 'Hello\n'
# 'World\n'
# 'Python'

這樣就可以看出,2-1是把文件的\n去除掉了,而非去除print()函式的\n

3:一次只讀一行。可讀大型文件

使用迴圈逐行讀取

with open("example.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip()) # 每次讀取一行

# Hello
# World
# Python​

4:讀取固定長度字節

with open("example.txt", "r", encoding="utf-8") as file:
chunk = file.read(1024) # 每次讀取 1024 字節
while chunk:
print(chunk)
chunk = file.read(1024)

# Hello
# World
# Python​

5:與1.相同,但更簡潔(pathlib.Path)

from pathlib import Path
content = Path("example.txt").read_text(encoding="utf-8") # 一次讀一整個檔案
# .read_bytes() # 則是讀二進制檔案

print(content)

# Hello
# World
# Python

寫法更短,甚至不用寫open()、也不用with,因為都包好了。是更Pythonic的方式

6:沒有with,則需要手動關閉文件(不推薦)

file = open("example.txt", "r", encoding="utf-8")
try:
content = file.read()finally:
file.close() # 手動關閉文件流,確保資源釋放

print(content)
# 只有 def, class 區塊會創建新的作用域(scope)
# if, for, while, with, try/catch 區塊不會創建作用域,所以content變數仍存在

忘記關閉的話會導致記憶體洩漏

留言
avatar-img
留言分享你的想法!
avatar-img
生物資訊實驗室
0會員
17內容數
這裡存放著滿滿的大平台!Rosalind 生物資訊解題平台的學習過程! 📢 適合對象: ✅ 想學習生物資訊的程式新手 ✅ 對Python程式有基礎,想挑戰 Rosalind 題目的解題者 ✅ 對DNA、蛋白質、基因組數據分析有興趣的人
生物資訊實驗室的其他內容
2025/03/20
題目:https://rosalind.info/problems/ini6/ 從這題開始有一點點難度了 計算每個字詞出現的次數,區分大小寫(Python Dict 預設就是大小寫敏感) 首先將輸入字串,按照空白字元做切割,得到一個陣列 ['We', 'tried', 'list',
2025/03/20
題目:https://rosalind.info/problems/ini6/ 從這題開始有一點點難度了 計算每個字詞出現的次數,區分大小寫(Python Dict 預設就是大小寫敏感) 首先將輸入字串,按照空白字元做切割,得到一個陣列 ['We', 'tried', 'list',
2025/03/18
計算所有在a~b之間的奇數數字 python沒有內建 isOdd()函式,所以只能寫ifㄍ判斷奇數、偶數 a, b = 100, 200 s = 0 for i in range(a, b+1): if i % 2 == 1: s += i print(s)
2025/03/18
計算所有在a~b之間的奇數數字 python沒有內建 isOdd()函式,所以只能寫ifㄍ判斷奇數、偶數 a, b = 100, 200 s = 0 for i in range(a, b+1): if i % 2 == 1: s += i print(s)
2025/03/18
題目:https://rosalind.info/problems/ini3/ 給一長字串,然後a, b, c, d 4個數字 切出字串[a~b]、字串[c~d]的位置,連接後印出來 (須包含字串[b]、字串[d]的位置) s = "HumptyDumptysatonawallHum
2025/03/18
題目:https://rosalind.info/problems/ini3/ 給一長字串,然後a, b, c, d 4個數字 切出字串[a~b]、字串[c~d]的位置,連接後印出來 (須包含字串[b]、字串[d]的位置) s = "HumptyDumptysatonawallHum
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—配方法
Thumbnail
高中數學主題練習—配方法
Thumbnail
手寫版,有寫錯或看不懂的地方,都可以在底下留言給我。 感謝!
Thumbnail
手寫版,有寫錯或看不懂的地方,都可以在底下留言給我。 感謝!
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
Thumbnail
高中數學主題練習—根式化簡
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News