1. 程式人生 > >python—文件處理

python—文件處理

data n) with open 不存在 最後一行 光標 pytho odi 清空

一、文件處理流程

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

  

python—文件處理