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

  

posted @ 2019-01-13 18:15  kuluma  阅读(215)  评论(0编辑  收藏  举报