iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 26
0
自我挑戰組

Python 學習筆記系列 第 26

Day26 Python 基礎 - 文件操作_V2(with語句)

唔,先前的代碼還是寫的不夠好,因為是寫死的,那如果我想讓用戶自已輸入想要替換的文字,那要怎麼做呢?

請在Terminal中執行 $python3 sed.py 是真的要刺下去嗎 不是真的要刺下去吧

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import sys

find_sys = sys.argv[1]
replace_sys = sys.argv[2]

f = open("foo.txt", "r", encoding="utf-8")
f_new = open("foo.bak", "w", encoding="utf-8")

for line in f:
    if find_sys in line:
        line = line.replace(find_sys, replace_sys)
    f_new.write(line)
f.close()
f_new.close()

在執行這代碼前,先砍掉foo.bak,確認不存在後,再執行上面的代碼,然後觀察一下是不是真的有替換了

那之前在操作文件時,有沒有發現常常有的代碼會寫f.close(),有的沒有寫,其實這是在操作文件時很容易被忽略,所以現在要介紹一個好物,with語句,它會主動幫我們關閉文件,並釋放文件資源,所以可以寫成下面的代碼,就不需要在額外寫f.close()了,這樣就輕鬆一點了

with opne("file.txt", "r", encoding="utf-8") as f:
	...

所以上面的代碼還可以再優化

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import sys

find_sys = sys.argv[1]
replace_sys = sys.argv[2]

with open("foo.txt", "r", encoding="utf-8") as f, \
        open("foo.bak", "w", encoding="utf-8") as f_new:
    for line in f:
        if find_sys in line:
            line = line.replace(find_sys, replace_sys)
        f_new.write(line)

同樣在terminal執行上面的代碼,未來可以盡量用with語句來打開文件

呼,文件操作的部份,大概就這些,文件操作是未來會最常使用的招式,可以好好練熟悉一點


上一篇
Day25 Python 基礎 - 文件操作_V2
下一篇
Day27 Python 基礎 - 字符轉編碼操作
系列文
Python 學習筆記29

尚未有邦友留言

立即登入留言