Python3 文件操作
打開方式
- 手動擋open+close
- 自動擋with,自關閉
常見操作
- w, r, a, b
- write
- readline
- readlines
- seek
- tell
- read
相關模塊
- fnmatch
- glob
- pickle
- StringIO
- shelve
- ……
手動檔
# 打開文件
f = open('文件名', '文件打開方式')
# f 是文件對象指針,用來進行讀寫操作
# 關閉文件
f.close()
文件的三種操作模式:讀r、寫w、追加a
示例代碼:
#!/usr/bin/python3
import os
# 切換到測試目錄
os.chdir(r'D:\python\test')
f = open('ss.txt', 'w') # 用寫的方式打開文件,不存在則創建
f.write('hello python3!')
f.close()
自動檔
寫模式下文件不存在可以自動創建,而讀模式不能自動 創建
示例代碼:
#!/usr/bin/python3
with open('ss1.txt', 'w') as f:
f.write('Hello Python3' * 8)
with open('ss1.txt') as f: # r模式是默認,可以不寫
data = f.read() # 一次讀出所有內容,作爲一個字符串保存到變量
print(data)
with open('ss1.txt', 'a') as f:
f.write('11111\n')
f.write('1111111\n')
f.write('111111111\n')
with open('ss1.txt') as f:
print(f.readline())
print(f.readline()) # readline() 每次讀取一行
with open('ss1.txt') as f:
print(f.readlines()) # readlines()讀取所有行與read()類似,但readlines()帶格式,可以按行輸出
tell() & seek()
- tell() 告訴我們文件讀到的位置
- seek()會返回到某個位置
示例代碼:
#!/usr/bin/python3
f = open('ss1.txt')
print(f.tell()) # 告訴我們讀到的位置
print(f.readline())
print(f.tell())
print(f.readline())
f.seek(0) # 返回到第幾個位置
print(f.tell())
print(f.readline())
f.seek(0)
print(f.readline())
f.close()
StringIO
虛擬文件、臨時文件,不需要真保存到磁盤
#!/usr/bin/python3
import io
output = io.StringIO()
output.write('第一行代碼\n')
print('試一下print到文件:', file=output)
# 取出內容
contents = output.getvalue()
print(contents)
output.close()
輸出:
第一行代碼
試一下print到文件:
shelve
用類似於字典的方式存儲任意的python對象
#!/usr/bin/python3
import shelve
with shelve.open('test.txt') as so:
so['yhy'] = '這是我'
with shelve.open('test.txt') as so:
print(so['yhy'])
輸出:
這是我
pickle
用二進制來讀寫文件
相關方法:
- dumps # 將數據通過特殊的形式轉換爲只有python語言認識的字符串,不寫入文件
- dump # 將數據通過特殊的形式轉換爲只有python語言認識的字符串,並寫入文件
- loads # 將pickle數據轉換爲python的數據結構
- load # 從數據文件中讀取數據,並轉換爲python的數據結構
示例代碼:
#!/usr/bin/python3
import pickle
dicta = {'1':{'日期':'1.2','事項': 'wan','耗時':'3'}}
with open('D:\python\memo.pkl', 'wb') as e:
e.write(pickle.dumps(dicta))
with open('D:\python\memo.pkl', 'rb') as f:
stra = pickle.load(f)
print(stra)
輸出:
{'1': {'日期': '1.2', '事項': 'wan', '耗時': '3'}}