Python3 文件操作

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'}}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章