python-文件处理

文件处理过程

1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件

f=open('test1.py','w',encoding='utf-8')
f.write('1111222')
f.close()
with open('test1.py','w',encoding='utf-8')  as f:
    f.write('wwwwwwww\t\n')
    f.writelines(['qqq\t\n','www\t\n','666\t\n'])

文件的打开模式

文件句柄 = open('文件路径', '模式')

r 只读模式(文件不存在,抛异常)
w 只写模式(文件不存在新建,文件存在覆盖)
a 在文件的末尾追加内容(文件不存在新建,文件存在在末尾追加)
r+ 读写模式(打开文件光标在起始位置,因此从起始位置开始写入)
w+ 读写模式(文件不存在新建,文件存在覆盖)
a+ 读写模式(文件不存在新建,文件存在在末尾追加)

对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
rb  
wb
ab

 

文件操作

1.r  r+  rb 读的方法

f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.readable() #文件是否可读,可读返回True

文件内容如下:

f=open('r_opt.txt','r',encoding='utf-8')
data=f.read()    #读取所有内容,光标移动到文件末尾
print(data)      
data1=f.read()
print(data1)     #光标已移动到文件末尾,再从光标位置开始读取文件,所以读取内容为空
f.close()
f=open('r_opt.txt','r',encoding='utf-8')
print(f.readline(),end='')    #读取第一行内容,光标移动到第二行首部,end=''去掉末尾换行符
print(f.readline(),end='')    #读取第二行内容,光标移动到第三行首部
f.close()
f=open('r_opt.txt','r',encoding='utf-8')
data=f.readlines()   #读取每一行内容,存放于列表中
print(data)      #--> ['123\n', '456\n', 'hello\n', '你好']
f.close()
f=open('r_opt.txt','r',encoding='utf-8')
print(f.readable())    #文件可读,返回True
f.close()

f1=open('w_opt.txt','w',encoding='utf-8')
print(f1.readable())    #文件不可读,返回False
f.close()
f=open('r_opt.txt','rb')
data=f.read()
print(data)                     # b'123\r\n456\r\nhello\r\n\xe4\xbd\xa0\xe5\xa5\xbd'
print(data.decode('utf-8'))     #--> 文件以utf8方式写入,rb以二进制模式读取文件内容时,需要进行解码
f.close()
f=open('r_opt.txt','r+',encoding='utf-8')  # r+ 可读可写,因此可以调用write()
data=f.read()
print(data)
f.write('edc66666')   #read()读取后,光标移动到末尾,这时候调用write()写入时,是从光标位置开始写入
f.close()

 

2.w w+  wb 写的方法

f.writable() #文件是否可写

f.write('1111\n222\n')  #针对文本模式的写,需要自己写换行符,一行行写入

f.writelines(['333\n','444\n'])  #文件模式

f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符,指定编码类型

f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式,指定编码类型

f=open('w_opt.txt','w',encoding='utf-8')
f.write('你好\n')     #文件不存在新建,文件存在覆盖(清空,重新写入)
f.write('hello world\n')     #文件不存在新建,文件存在覆盖(清空,重新写入)
f.close()
f=open('w_opt.txt','w',encoding='utf-8')
f.writelines(['你好\n','我们\n','china'])
f.close()
f=open('w_opt.txt','w+',encoding='utf-8')   #w+  可读可写,因此可以调用read()
f.writelines(['你好\n','我们\n','china',])   
f.seek(0)           #写入后光标在文件内容末尾,seek(0)将光标移动至文件最初始位置
data=f.read()       
print(data)
f.close()
f=open('w_opt.txt','wb')   #b模式写入
f.write(bytes('你好哈哈',encoding='utf-8'))
f.write('你好哈哈'.encode('utf-8'))
f.close()
f=open('w_opt.txt','wb')   #b模式写入
f.writelines(['你好哈哈\n'.encode('utf-8'),bytes('1234哈哈',encoding='utf-8')])
f.close()

 3.a  a+ ab追加写模式

f=open('w_opt.txt','a',encoding='utf-8')
f.write('123456\n')  #文件末尾追加内容
f.write('00000\n')
f.close()
f=open('w_opt.txt','a+',encoding='utf-8')
f.seek(0)   #a+打开模式,光标在末尾,seek()移动光标至起始位置
data=f.read()
print(data)
f.close()
f=open('w_opt.txt','ab')   #b模式追加写入
f.writelines(['笑嘻嘻\n'.encode('utf-8'),bytes('小秘密',encoding='utf-8')])
f.close()

4.光标的移动

read(x):
文件打开方式为文本模式时,代表读取x个字符
文件打开方式为b模式时,代表读取x个字节

f=open('w_opt.txt','r',encoding='utf-8')  #文本模式
data=f.read(4)     #-->你好哈哈
print(data)
f.close()

f=open('w_opt.txt','rb')   #b模式
data=f.read(4)
print(data)     #-->b'\xe4\xbd\xa0\xe5'
f.close()

 

seek():光标移动,以bytes为单位移动,有三种方式0,1,2,其中1,2必须在b模式下进行

seek(0):光标移动到文件最起始的位置

seek(10,1):光标当前位置向后移动10个字节

seek(-5,2):光标从末尾,倒序移动5个字节

tell():获取当前光标所在的位置(以字节为单位)

truncate() :截取文件,文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件,截取就无意义

f=open('w_opt.txt','a+',encoding='utf-8')
f.truncate(13)   #截取文件前13个字节
f.close()

 

练习

# 1. 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数
# apple 10 3
# tesla 100000 1
# mac 3000 2
# lenovo 30000 3
# chicken 10 3

with open('a.txt','r',encoding='utf-8') as shop:
    s=[]
    for i in shop.readlines():   #读取所有内容,结果-->列表
        s.append(eval(i.split(' ')[1])*eval(i.split(' ')[2]))  
        #split将列表元素(字符串)根据空格分隔,分隔的结果为字符串,eval函数将字符串的数据类型提取出来进行数学运算
    print(sum(s))
# 2. 修改文件内容,把文件中的alice都替换成SB
import os
with open('source.txt','r',encoding='utf-8') as r_sou,open('tar.txt','w',encoding='utf-8') as w_tar:
    for line in r_sou:
        line=line.replace('alice','sb')
        w_tar.write(line)

os.remove('source.txt')
os.rename('tar.txt','source.txt')

 

转载于:https://www.cnblogs.com/lijinping716/p/11459851.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值