1. 程式人生 > >python 關於文件,以及文件夾的操作

python 關於文件,以及文件夾的操作

pla n) 技術 eee 單位 文件操作 內容 指針 不同的

1.打開文件:

f=open(r‘E:\PythonProjects\test7\a.txt‘,mode=‘rt‘,encoding=‘utf-8‘)

以上三個單引號內分別表示:要打開的文件的路徑,mode為文件打開方式具體介紹在下文,encoding為文件的字符編碼,一般默認為utf-8

2.讀寫文件:

data=f.read() # 讀文件

f.write() # 寫文件

3.關閉文件:

f.close()

4.為了簡便,一般采用上下文的方法進行文件操作,可不用關閉文件

技術分享圖片
1 with open(a.txt,mode=rt,encoding=utf-8) as f:
2 data=f.read() 3 print(data)
讀文件

技術分享圖片
with open(a.txt,mode=wt,encoding=utf-8) as f:
    f.write(hello world)
寫文件

5.控制文件讀寫的操作:

r:(默認模式):只讀:以該模式打開文件時,若文件不存在則報錯,若文件存在,則文件指針在文件開頭,即從文件開頭開始讀文件

w:只寫:以該模式打開文件時,若文件不存在則創建一個文件,如文件存在,則清空文件內容,文件指針移到開頭

a:追加寫:以該模式打開文件時,若文件不存在則創建一個文件,如文件存在,則將文件指針移到文件末尾,在文件末尾寫入新的內容

6.控制文件讀寫內容的模式:(t 和 b都不能單獨使用,必須與r,w,a結合使用)

t:(默認):無論讀寫都是以字符為單位,只能識別文本文件,必須要制定encoding

b:無論讀寫都是以字節為單位,可以識別所有文件,一定不能指定encoding

7.文件的拷貝

with open (a.txt,mode=rb) as af,    open(b.txt,mode=wb) as bf:
    data=af.read
    f.write(data)  

執行程序後,打開文件,即可發現文件已成功拷貝,這裏使用 b 而不是用 t 模式,是因為文件有多種格式

8.文件的修改:

文件的修改是在硬盤上實現文件的覆蓋,相當於一個新的文件以舊的文件名來命名的; 文件的修改有倆種方式,分別適用於不同的情景

方式一(適用於容量小的文件):這種方式的原理是:創建一個新的文件,將舊文件的內容拷貝到新的文件中;這樣內存裏就存在倆個文件,故不適用於容量大的文件,具體代碼見下方 View

技術分享圖片
with open(a.txt,mode=rt,encoding=utf-8) as f:
    data=f.read()
    data_new=data.replace(yang, yv)
with open(b.txt,mode=wt,encoding=utf-8)as p:
    p.write(data_new)
View Code

方式二(適用於容量大的文件):此方式的原理為:讀取舊文件的一行內容,修改後寫到臨時文件中,循環往復直到寫完,然後將源文件刪除,將臨時文件命名為源文件名.這種方式在內存中只存在2行文件,節省內存,可用於大文件

技術分享圖片
import os
with open(b.txt,mode=rt,encoding=utf-8) as f,     open(.b.txt.swap,mode=wt,encoding=utf-8) as p:
     for line in f:
         p.write(line.replace(yv,yang))  
        # 調用replace方法,將源文件中的‘yv‘,換成‘yang‘
os.remove(b.txt)
os.rename(.b.txt.swap,b.txt) 
View Code

9. 文件的階段:truncate(n)

將文件中n個字節後內容全刪了,當 n 不存在時,即刪除文件全部內容

10.文件內指針的移動

f.seek(): 指針的移動是以字節為單位的

seek 有三種模式:

0:(默認模式) 指針在文件開頭,只有在 0 模式可以在 t 模式下用,也可以在 b 模式下用,而 1 ,2 模式只能在 b 模式下使用

1:     指針在當前位置

2:     指針在文件末尾

以下為具體事例:

技術分享圖片
# 0
with open(a.txt,mode=rt,encoding=utf-8)as f:
     f.seek(3,0)
     print(f.tell())  # 指針當前位置
     print(f.read())  # 從指針後讀出所有內容

# 1  參照指針當前位置
 with open(a.txt,mode=rb)as f:
     f.read(2)
     f.seek(4,1)
     print(f.tell())
     print(f.read().decode(utf-8))

# 2   參照文件末尾
 with open(a.txt,mode=rb)as f:
     f.seek(-5,2)
     print(f.tell())
     print(f.read().decode(utf-8))
View Code

當 seek處於 2 模式時,可以將文件中新加入的內容打印出來,具體代碼如下:

技術分享圖片
 # 另一個文件進行寫操作,寫的代碼如下:

with open(a.txt,mode=at,encoding=utf-8)as f:
     f.write(hello world\n)


#  每在文件中寫入新的內容,都打印出來,以下代碼執行打印操作:
import time
with open(a.txt,mode=rb)as f:
    f.seek(0,2)
    while True:
        line=f.readline()  # readline 可以讀取沒有內容的部分
        # print(line.decode(‘utf-8‘))
        if len(line)==0:
            time.sleep(0.1)
        else:
            print(line.decode(utf-8))
View Code

python 關於文件,以及文件夾的操作