1. 程式人生 > >python—檔案處理

python—檔案處理

一、檔案處理流程

1、開啟檔案,得到檔案控制代碼並賦值

2、通過控制代碼對檔案進行操作

3、關閉檔案

 

二、檔案開啟模式

1、r,只讀,預設模式

2、w,只寫

3、a,追加

4、 r+、w+、x+、a+ ,可讀可寫

##  模式  r—只讀    預設只讀

f = open('衝鴨','r',encoding='utf-8')

data = f.read()
print(data)

## 是否可讀,返回布林
print(f.readable())

# 一次讀一行
print('第一行',f.readline())
print('第二行',f.readline())

## 一次讀出多行,放在一個列表中
print(f.readlines())   ## ['人家剛剛就很尷尬法規和\n', 'wefrdferwfer']

f.close()

  

##  模式  w—只寫
## 若檔案存在,清空檔案
## 若檔案不存在,執行後新建檔案
## 寫的檔案內容 是str型別


f = open('衝鴨','w',encoding='utf-8')
f.write('sdcdcd\n')
f.write('dsfedf\ndsdds\nsdsx\n')

## 是否可寫
f.writable()

##
f.writelines(['2222\n','dsssd\n'])

f.close()

  

## 模式   a—追加  

f = open('衝鴨','a',encoding='utf-8')
f.write('寫在檔案最後')
f.close()

  

## 讀取檔案中真正的換行符號 \r\n
f = open('a.txt','r',encoding='utf-8',newline='')
print(f.readlines())

  

3、檔案修改

## 修改檔案內容(先讀後寫,覆蓋檔案內容)

src_f = open('衝鴨','r',encoding='gbk')
data = src_f.readlines()
src_f.close()

dst_f = open('衝鴨','w',encoding='gbk')
dst_f.write(data[0])
dst_f.close()

  

4、with  open  ....  as ... 開啟方式

##  另一種開啟方式  
with open('衝鴨','r',encoding='gbk') as f:
     print (f.read())

with open('衝鴨','r',encoding='gbk') as src_f,\
    open('衝鴨_new','w',encoding='gbk') as dst_f:
    data = src_f.read()
    dst_f.write(data)

  

5、b+方式,以位元組開啟

## b的方式開啟不能指定編碼
## 字串-----encode------》bytes
## bytes------decode-----》字串
f = open('衝鴨','rb')
data = f.read()
print(data.decode('utf-8'))

f = open('衝鴨','wb')
f.write('啦啦'.encode('utf-8'))

  

6、方法

f = open('a.txt','r',encoding='utf-8')

## tell()  當前游標位置
print(f.tell())   ###  0
f.readline()
print(f.tell())   ###  7  以位元組方式,1個漢字3個位元組,換行\r\t 2個位元組

##  seek()  控制游標的移動(位元組)
f.seek(3)
print(f.tell()) ## 1

## read()  讀取一個字元
print(f.read(1))

 

## truncate()  擷取(位元組方式)  不能以w+方式開啟,會清空檔案
f = open('a.txt','r+',encoding='utf-8')
f.truncate(10)

  

7、seek()方法:移動游標

## seek() 移動游標位置
## seek(10,n)  10--移動10個位元組位置,換行\r\t  是2個位元組
##             n—0,預設從開頭開始;1—從當前游標位置開始;2—從結尾開始
f = open('a.txt','rb')
print(f.tell())
f.seek(-10,2)
print(f.tell())

  

f = open('a.txt','rb')

## 迴圈檔案方式
for i in f:
    print(i.decode('utf-8'))

## 讀取檔案最後一行
## 迴圈檔案方式
for i in f:
    offs = -10
    while True:
        f.seek(offs,2)
        data = f.readlines()
        if len(data) > 1:
            print('檔案最後一行的內容為:',data[-1].decode('utf-8'))
            break
        offs *= 2