Python檔案操作

2021-10-08 20:12:49 字數 3487 閱讀 8213

f = open(r"y:\new\a.txt", mode="rt", encoding="utf-8")  # t讀寫檔案的格式為字串,open返回值檔案物件/檔案控制代碼,是程式的變數值

data = f.read() # 硬碟上的檔案內容讀到記憶體中,os根據指定的encoding把二進位制數轉成t(unicode字串)給程式,t僅限文字檔案

print(data, type(data))

f.close() # close**os資源,close後不能再read,檔案物件是程式的變數值,是程式的資源,仍然存在

with open(r"y:\new\a.txt", mode="rt", encoding="utf-8") as f, \

open(r"y:\new\b.txt", mode="rt", encoding="utf-8") as f1:

pass # 也可以用...

with open(r"y:\new\a.txt", mode="rt", encoding="utf-8") as f:

print(f.readable()) # true

print(f.writable()) # false

with open(r"y:\new\b.txt", mode="wt", encoding="utf-8") as f:

f.write("你好\nhello world.")

f.write("開啟檔案不關的情況下,指標跟著移動,後續新寫入的內容則是追加.但是檔案關了重新開啟,再寫=擦寫")

with open(r"y:\new\a.txt", mode="wb") as f:

f.write("原生格式寫入新內容".encode("utf-8"))

src_file = input("原始檔路徑: ").strip()

dst_file = input("目標檔案路徑: ").strip()

with open(r"%s" % src_file, mode="rb") as f1, \

open(r"%s" % dst_file, mode="wb") as f2:

data = f1.read()

f2.write(data)

for line in f1:

f2.write(line)

file.seek(移動的位元組個數, 三種模式)  # 3種模式都以位元組為移動單位
1.1 模式 0 : 從檔案開頭為起點,f.seek(3, 0)從頭往右移動3個位元組

1.2 模式 1 : 從當前指標所在的位置,f.seek(6, 1)前面停在第3位元組,現停在第9位元組

1.3 模式 2 : 從檔案末尾為起點,f.seek(-6, 2)從末尾往左移6位元組,正數右移,負數左移2.1 mode="t"模式: 只能用 模式 0

2.2 mode="b"模式: 都可用 模式 0, 1, 2

file.read(n)  # 從當前位置讀到末尾,只有mode="t"模式下,read(n)中n代表字元個數
with open(r"y:\new\a.txt", mode="rt", encoding="utf-8") as f:  # 檔案內容:hello你好

print(f.read(6)) # 列印: hello你 ,以字元為單位,中英文都是乙個字元

with open(r"y:\new\a.txt", mode="rb") as f:  # 檔案內容:hello你好

print(f.read(6)) # 列印: b'hello\xe4' ,以位元組為單位,utf-8中,中文3位元組,英文1位元組

f.seek(0, 2) # 指標跳到末尾

print(f.tell()) # tell獲取從檔案開頭到當前位置的總位元組數

3.1 測試程式寫入日誌
import time

with open('access.log', mode='at', encoding='utf-8') as f:

f.write("%s %s\n" % (time.strftime("%y-%m-%d %h:%m:%s %p"), "程式寫的日誌內容"))

3.2 模擬寫tail -f 檢視日誌
import time

with open('access.log', mode='rb') as f:

f.seek(0, 2)

while true:

line = f.readline() # readline每次讀一行

if len(line) == 0: # 沒有日誌的時候, 稍微等待, 減少負載開銷

time.sleep(0.5) # 死迴圈會不停呼叫,負載會公升高

else:

print(line.decode('utf-8'), end='') # 原日誌中\n,列印預設也有,會有兩個\n去掉乙個

with open(r"y:\new\a.txt", mode="wt", encoding="utf-8") as f:

lines = ["aa\n", "bb\n", "cc\n"]

for line in lines: # 這兩行效果等於f.writelines(lines), 實質就是for迴圈取值

f.write(line)

with open(r"y:\new\a.txt", mode="r+t", encoding="utf-8") as f:

f.truncate(3)

with open(r"y:\new\a.txt", mode="rt", encoding="utf-8") as f1:

data = f1.read()

res = data.replace("source", "target")

with open(r"y:\new\a.txt", mode="wt", encoding="utf-8") as f2:

f2.write(res)

import os

with open(r"y:\new\a.txt", mode="rt", encoding="utf-8") as f1, \

open(r"y:\new\.a.txt.swp", mode="wt", encoding="utf-8") as f2:

for line in f1:

f2.write(line.replace("source", "target"))

os.remove(r"y:\new\a.txt")

os.rename(r"y:\new\.a.txt.swp", r"y:\new\a.txt")

python 檔案操作

簡明 python 教程 中的例子,python 執行出錯,用open代替file 可以執行。poem programming is fun when the work is done if you wanna make your work also fun use python f open e ...

python檔案操作

1,將乙個路徑名分解為目錄名和檔名兩部分 a,b os.path.split c 123 456 test.txt print a print b 顯示 c 123 456 test.txt 2,分解檔名的副檔名 a,b os.path.splitext c 123 456 test.txt pri...

Python 檔案操作

1.開啟檔案 如下 f open d test.txt w 說明 第乙個引數是檔名稱,包括路徑 第二個引數是開啟的模式mode r 唯讀 預設。如果檔案不存在,則丟擲錯誤 w 只寫 如果檔案 不存在,則自動建立檔案 a 附加到檔案末尾 r 讀寫 如果需要以二進位制方式開啟檔案,需要在mode後面加上...