Python全棧-第八課 學習筆記

Python第八課 學習筆記

文件操做的初識

  • 如何利用python代碼寫一個軟件,去操做文件。python

    • 文件路徑:pathlinux

    • 打開方式:讀,寫,追加,讀寫,寫讀......windows

    • 編碼方式:utf-8,gbk ,gb2312......函數

    • #打開文件並讀取
      f1 = open('d:\123.txt',encoding='utf-8',mode='r')
      content = f1.read()
      print(content)
      f1.close()
  • 代碼解釋:學習

    • open()內置函數,open底層調用的是操做系統的接口。
      f1,變量,f1,fh,file_handler,f_h,文件句柄。對文件進行的任何操做,都得經過文件句柄. 的方式。
      encoding:能夠不寫,不寫參數,默認編碼本:操做系統的默認的編碼
      windows: gbk or utf-8
      linux: utf-8
      mac : utf-8
      f1.close() 關閉文件句柄。
  • 文件操做的三部曲:編碼

    • 一、打開文件。
    • 二、對文件句柄進行相應操做。
    • 三、關閉文件。
  • 報錯緣由:操作系統

    • UnicodeDecodeError:文件存儲時與文件打開時編碼本使用不一致。code

    • 第二個錯誤: 路徑分隔符產生的問題:視頻

      • 解決方式1(加\ 使轉義字符無效)
        C:\\Users\oldboy\Desktop\123.txt'
        解決方式2(加r')
        r'C:\Users\oldboy\Desktop\123.txt'

文件操做的讀寫追加

  • r , rb, r+,r+b 四種模式
  • r: read()、read(n)、readline()、readlines()
  • for循環讀
  • rb: 操做的是非文本的文件。好比圖片,視頻,音頻。
#.read() 所有讀出來
f = open('文件的讀', encoding='utf-8')
content = f.read()
print(content,type(content))
f.close()

#.read(n) 按照字符讀取,讀出n個字符
f = open('文件的讀', encoding='utf-8')
content = f.read(5)
print(content)
f.close()

#.readline() 按照一行行讀
f = open('文件的讀', encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
f.close()

#.readlines() 返回一個列表,列表中的每一個元素是源文件的每一行。
f = open('文件的讀', encoding='utf-8')
l1 = f.readlines()
print(l1)
f.close()

#for循環讀取(大文件)
f = open('文件的讀', encoding='utf-8')
#['12\n', '34\n', '56\n', '78\n', '910\n']
for line in f:
	print(line)
f.close()

f = open('美女.jpg',mode='rb')
content = f.read()
print(content)
f.close()
  • 文件操做的寫
  • w,wb, w+,w+b 四種模式
  • wb: 操做的是非文本的文件。好比圖片,視頻,音頻。
# 沒有文件,建立文件,寫入內容
f = open('文件的寫',encoding='utf-8',mode='w')
f.write('隨便寫一點')
f.close()

# 若是文件存在,先清空原文件內容,在寫入新內容
f = open('文件的寫',encoding='utf-8',mode='w')
f.write('隨便寫一點點')
f.close()

# wb(兩個步驟至關於複製一張圖片的過程)
f = open('美女.jpg',mode='rb')
content = f.read()
print(content)
f.close()

f1 = open('美女2.jpg',mode='wb')
f1.write(content)
f1.close()
  • 文件操做的追加
  • a, ab, a+,a+b 四種模式
# 沒有文件建立文件,追加內容
f = open('文件的追加',encoding='utf-8',mode='a')
f.write('123456')
f.close()

# 有文件,在原文件的最後面追加內容。
f = open('文件的追加',encoding='utf-8',mode='a')
f.write('654321')
f.close()
  • 文件操做的其餘模式 r+
# 讀並追加 (順序不能錯誤。)
f = open('文件的讀寫', encoding='utf-8', mode='r+')
content = f.read()
print(content)
f.write('人的一切痛苦,本質都是對於本身無能的憤怒。')
f.close()

# 錯誤示例(先寫再讀)(utf-8中文三個字節,英文一個字節,先讀時換行和標點對不上都會致使亂碼和報錯)
f = open('文件的讀寫', encoding='utf-8', mode='r+')
f.write('123456789')
content = f.read()
print(content)
f.close()

文件操做的其餘功能

  • 總結:三個大方向
  • 讀 四種模式:r,rb,r+,r+b
  • 寫 四種模式:w,wb,w+,w+b
  • 追加 四種模式:a, ab,a+,a+b
  • 相應的功能:對文件句柄的操做:read read(n) readline() readlines() write()
# .tell 獲取光標的位置 單位字節。
f = open('文件的讀寫', encoding='utf-8')
print(f.tell())
content = f.read()
print(content)
print(f.tell())
f.close()

# .seek 調整光標的位置
f = open('文件的讀寫', encoding='utf-8')
f.seek(7)
content = f.read()
print(content)
f.close()

# .flush 強制刷新(強制保存)
f = open('文件的其餘功能', encoding='utf-8',mode='w')
f.write('123456')
f.flush()
f.close()
  • 打開文件的另外一種方式
# 優勢1:不用手動關閉文件句柄
with open('文件的讀',encoding='utf-8') as f1:
	print(f1.read())

# 優勢2:一個語句操做多個文件句柄
with open('文件的讀', encoding='utf-8') as f1,\
		open('文件的寫', encoding='utf-8', mode='w')as f2:
	print(f1.read())
	f2.write('123456')

# 缺點:它是在必定時間內關閉。
  • 文件操做的改接口

  • 文件操做改的流程

    • 以讀的模式打開原文件
    • 以寫的模式建立一個新文件
    • 將原文件的內容讀出來修改爲新內容,寫入新文件
    • 將原文件刪除
    • 將新文件重命名成原文件
  • 具體代碼:

#簡潔版
import os
#1.以讀的模式打開原文件。
#2.以寫的模式建立一個新文件。
with open('文件操做的改',encoding='utf-8') as f1,\
	open('文件操做的改.bak',encoding='utf-8',mode='w') as f2:
#3.將原文件的內容讀出來修改爲新內容,寫入新文件。
	old_content = f1.read()
	new_content = old_content.replace('Jarvis', 'jarvis')
	f2.write(new_content)
	os.remove('文件操做的改')
	os.rename('文件操做的改.bak','文件操做的改')

# 進階版
import os
#1.以讀的模式打開原文件。
#2.以寫的模式建立一個新文件。
with open('alex自述',encoding='utf-8') as f1,\
    open('alex自述.bak',encoding='utf-8',mode='w') as f2:
#3.將原文件的內容讀出來修改爲新內容,寫入新文件。
    for line in f1:
        new_line = line.replace('Jarvis', 'jarvis')
        f2.write(new_line)
	os.remove('文件操做的改')
	os.rename('文件操做的改.bak','文件操做的改')

# 有關清空的問題:
# 關閉文件句柄,再次以w模式打開此文件時,纔會清空。
with open('文件的寫', encoding='utf-8',mode='w') as f1:
	for i in range(9):
		f1.write('12345')
相關文章
相關標籤/搜索