Python基礎知識之文件讀寫與修改


基本操作

f = open("file1", "r")  # 打開文件
first_line = f.readline() # 讀一行
data = f.read() # 讀取剩下所有內容,文件大時候不要用
f.close()  #關閉文件

如果我們想循環文件,並且在第九行輸出分割的話:

for index, line in enumerate(file.readlines()):
    if(index == 5):
        print("-------我是分割線-------")
        continue
    print(line.strip())

注意: strip()方法是用來去除字符串首尾空格的

但是當我們打開一個大文件的時候我們就會發現一個問題,file.readlines()是提前將所有行數都先讀取出來,再進行操作,那么當我們打開一個幾十個G的文件的時候效果可想而知,因此上述方法基本不使用,應該使用以下方法:

count = 0
for line in file:
    if count == 9:
        print("-------我是分割線-------")
        count += 1
        continue
    print(line)
    count += 1

打開文件的模式有:

  • r, 只讀模式(默認)
  • w,只寫模式【不可讀;不存在則創建;存在則刪除內容】
  • a,追加模式【可讀;不存在則創建;存在則只追加內容】

“+”表示可以同時讀寫某個文件

  • r+,可讀寫文件【可讀;可寫;可追加】-----一般使用這個模式
  • w+,可寫讀文件【可寫;可讀;可追加】-----基本用不到
  • a+,追加讀寫文件

“b”表示處理二進制文件(如:FTP發送上傳ISO鏡像文件,Linux可忽略,windows處理二進制文件時需要標注)

  • rb,以二進制的模式讀取文件,不可以傳encoding參數
  • wb,以二進制編碼的模式寫文件
    f.write("string字符串".encode())

“U”表示在讀取時,可以將\r\n \r \n自動轉換成\n(與r或r+模式同時使用)

  • rU
  • r+U

文件的方法

  • tell() 當前文件指向的指針,計數方式是按照字符個數
  • seek(字符位置) 查找文件相應字符位置
    seek(0)就是返回到文件開始位置,一般和tell()方法一起使用
  • encoding() 返回當前文件編碼格式
  • flush() 刷新當前緩沖區,建議在關閉文件前先flush當前緩沖區。
模仿進度條:
	import sys, time
	for i in range(20):
	    sys.stdout.write("#")
	    sys.stdout.flush()
	    time.sleep(0.1)

在前面,我們已經注意到python寫文件的時候,會將之前的內容刪除掉,重寫覆蓋,那么我們如何來修改文件呢?

文件修改的方式

  • 將文件加載到內存中像VIM那樣,再進行修改
  • 打開一個文件,修改完成之后寫到新文件里

修改文件的思路

  1. 打開兩個文件
  2. 從源文件逐行讀取,邊讀邊寫進新文件中
  3. 通過語句進行判斷,找到需要需改的地方,修改文件,再將修改過后的內容寫到新文件中。
f = open("yesterday", 'r', encoding="utf-8")
fnew = open("yesterday.bak", "w", encoding="utf-8")

for line in f:
    if "修改前的語句" == line:
        line = line.replace("修改前的語句", "修改后的語句")
    fnew.write(line)
f.close()
fnew.close()

line = line.replace("修改前的語句", "修改后的語句") 注意是line而不是f

with語句

為了避免打開文件后忘記關閉,可以通過管理上下文,即:

with open("需要打開的文件", 'r', encoding="utf-8") as f:
    # 執行語句...
    # 當跳出with程序塊時,自動關閉文件

如此方式,當with代碼塊執行完畢后,內部會自動關閉並釋放文件資源。
在python2.7后,with又支持同時對多個文件的上下文進行管理,即:

with open("需要打開的文件1") as f, open("需要打開的文件2") as f2:
    # 執行語句...
    # 當跳出with程序塊時,自動關閉文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM