Python从入门到超神之文件处理
一、文件处理流程(python默认是utf-8编码)
打开文件函数:open(文件路径,encoding=‘utf-8’)注意:open会检索系统的编码,所以需要调整一致否则报错
例如:fi=open('Alex',encoding=‘utf-8’)
fi.read() 读取出文件中所有数据
fi.readline() 一行一行读取,一次读取一行。若是没有了,则读取空行
readlines() 方法用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for... in ... 结构进行处理。如果碰到结束符 EOF 则返回空字符串。
fi=li.open('文件名',encoding='utf-8')
print('第1行',f.readline(),end="")
print('第2行',f.readline(),end="")
print('第3行',f.readline(),end="")
print('第4行',f.readline(),end="")
=====>> 1111111111111
2222222222222
3333333333333 #每行输出后无空格
4444444444444
注意:一旦使用read后,在使用readline则无效,因为已经读取完了。fi.readlines() #读取多行,一行输出
写文件操作
f=open('hello.txt','w',encoding="utf-8")
f.write('1111111\n')
f.write('2222222\n')
f.close()
#写模式只能写不能读,若文件存在会把内容直接清除掉;不存在则建立一个空文档
#无论是写还是读,都是字符串,不能是数字
f.writeable() #判断是否文件可写
f.writelines([‘555555\n’,'666666\n',‘777777\n’]) #写一个列表传给文件,列表中为内容
追加操作
open('a.txt','a',encoding='utf-8')
# a 在后面追加记录
f=open('a.txt','a',encoding='utf-8')
f.write('')
f.close()
#r+ 即可读又可写
#文件没有修改一说,所谓修改就是覆盖掉
f=open('a.txt','r+',encoding='utf-8')
data=f.read()
print(data)
f.write('123abc')
a=open('a.txt','r+',encoding='utf-8')
data=a.readlines()
a.close()
des_f=open('xxx_new','w',encoding='utf-8')
des_f.write(data[0])
des_f.close()
#with的好处就是不用关闭文件。
with open('a.txt','w',encoding='utf-8') as f,\
open('xxx_new','r',encoding='utf-8'):
data=a.read()
des_f.write(data)
w+,写读(可读可写)
x+,写读(可读可写)
a+,写读(可读可写)
当文件不能以文本方式进行修改时,我们要用b(字节)模式进行处理。
注意:b 表示以bytes模式(字节)方式读/写,b的方式不能指定编码
rb r+b wb w+b xb x+b ab a+b
#两种方法进行b模式写操作,一是将文本用bytes()函数转换为字节型,二是直接对其进行‘utf-8’解码,因为系统硬盘上默认是字节形式存储数据的
f=open('xxx_new','wb')
f.write(bytes('11111111\nhello,boy\n123145','utf-8'))
f.write('11111111\nhello,boy\n123145'.encode('utf-8'))
#newline读取文件中的真正换行号 \r\n
f=open('xxx_new','r+',encoding='latin-1',newline='')
print(f.closed) #判断文件是否关闭
print(f.encoding) #文件打开时的编码,与硬盘上编码形式无关
f.closed) 判断文件是否关闭
f.encoding 文件打开时的编码,与硬盘上编码形式无关
f.flush() 把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区。
f.name 返回文件名
f.tell() 光标当前所在位置,默认打开时位置为0 以字节方式计算位置,一个汉字3个字节,换行是两个字符\r\n
f.isatty() 是不是终端设备
f.truncate(10) 用于截断文件并返回截断的字节长度。从开头到第十个位
f.seek(offset,whence=0) 移动文件读取指针到指定位置。按字节进行移动,若操作成功,
则返回新的文件位置,如果操作失败,则函数返回 -1.
offset:开始的偏移量,需要移动偏移的字节数
whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
例如:f.seek(4,5) 表示从第五个位置开始偏移4个字节长度
#seek高级玩法 必须要以'b'模式进行操作,否则会报错
#seek使用时是按字节进行计算的
f=open('seek.txt','rb')
print(f.tell())
f.seek(10,1) #默认第二个参数为0,每次都从第一个位置开始 为1时,相对于光标当前位置
print(f.tell())
f.seek(3,1)
print(f.tell()) ---------->>0 10 13 #参数为2代表相对位置,倒着读,意味着倒着seek,注意第一个参数为负值
f.seek(-10,2)
#seek读取文件最后一行,循环文件一行行读取
f=open('日志文件','rb')
for i in f:
print(i)
#日志文件实时读取功能
f=open('a.txt','rb')
for i in f: #若是readlines太占内存,会把所有的都放置内存中,所以推荐使用for i in 文件名:
offs=-10 #定义偏移量,代表日志中一行的字节数
while True:
f.seek(offs,2)
data=f.readlines()
if len(data)>1:
print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
break
offs*=2
Python从入门到超神之文件处理的更多相关文章
- python从入门到大神---4、python3文件操作最最最最简单实例
python从入门到大神---4.python3文件操作最最最最简单实例 一.总结 一句话总结: python文件操作真的很简单,直接在代码中调用文件操作的函数比如open().read(),无需引包 ...
- python从入门到大神---Python的jieba模块简介
python从入门到大神---Python的jieba模块简介 一.总结 一句话总结: jieba包是分词技术,也就是将一句话分成多个词,有多种分词模型可选 1.分词模块包一般有哪些分词模式(比如py ...
- python从入门到大神---2、和Python编程相遇的日子
python从入门到大神---2.和Python编程相遇的日子 一.总结 一句话总结: python2和python3是很不同的,连语法都不同,比如 print 函数打印结果 1.python中pip ...
- python从入门到大神---3、浮光掠影python3语法
python从入门到大神---3.浮光掠影python3语法 一.总结 一句话总结: 语法不必一次记全部,效率太差,用哪部分内容,就把那部分内容全部记下来 1.python3中单引号和双引号的区别是什 ...
- python从入门到大神---1、初始化实例、类属性、方法
python从入门到大神---1.初始化实例.类属性.方法 一.总结 一句话总结: 方法不加括号是代码段:感觉python方法和js,php很类似,不加括号是代码段,加括号变成方法,比如f,f() 1 ...
- Python:从入门到实践--第十章--文件和异常--练习
#.python学习笔记:在文本编辑器中新创建一个文件,写几句话老总结你至此学到的python知识 #其中‘In Python you can’ 打头.将这个文件命名为learning_python. ...
- python从入门到实践-10章文件和异常(括号问题)
#!/user/bin/env python# -*- coding:utf-8 -*- # 1.从文件中读取数据with open('pi_digits.txt') as file_object: ...
- Python入门教程 超详细1小时学会Python
Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...
- 《手把手教你》系列进阶篇之4-python+ selenium自动化测试 - python几种超神操作你都知道吗?(详细教程)
1. 简介 今天分享和讲解的超神操作,对于菜鸟来说是超神的操作,对于大佬来说也就是几个简单方法的封装和调用.这里讲解和分享这部分主要是为了培养小伙伴们和童鞋们的面向对象的开发思维,对比这样做的好处让你 ...
随机推荐
- MM-移动类型
链接:SAP移动类型 移动类型 备注 业务类型 SAP中事务代码 备注 101 采购订单收货.生产订单收货 收货 migo CO11N顶层处理移动类型\跨工厂收货 102 采购订单收货冲销 收货 ...
- Appium基础知识与环境搭建
基础知识: 环境搭建: 1.安装jdk,配置java环境变量 (1)新建变量"JAVA_HOME",变量值"D:\Frameworks\Java\jdk1.8.0_18 ...
- 基于MPI的大规模矩阵乘法问题
转载请注明出处. /* Function:C++实现并行矩阵乘法; Time: 19/03/25; Writer:ZhiHong Cc; */ 运行方法:切到工程文件x64\Debug文件下,打开命令 ...
- 在Maven中新增自定的jar包
引言: 在软件项目中,Maven提供了一体化的类库管理系统,非常实用.但是,如果新增的类库jar在网络上无法获取到,如何在本地按照Maven的规则添加进来呢?本文将通过一个小例子展示新增过程. 背景介 ...
- 用Python手把手教你搭一个Transformer!
来源商业新知网,原标题:百闻不如一码!手把手教你用Python搭一个Transformer 与基于RNN的方法相比,Transformer 不需要循环,主要是由Attention 机制组成,因而可以充 ...
- linux下面重启nfs报错:nfs-server.service:main process exited
linux下面重启nfs报错:nfs-server.service:main process exited [root@dhcp-66-83-39 images]# service rpcbind s ...
- BASE64、MD5、SHA、HMAC几种加密算法
本篇内容简要介绍BASE64.MD5.SHA.HMAC几种加密算法. BASE64编码算法不算是真正的加密算法. MD5.SHA.HMAC这三种加密算法,可谓是非可逆加密,就是不可解密的加 ...
- python--第十六天总结(bootstrap)
一. 实现原理 网格布局是通过容器的大小,平均分为12份(可以修改),再调整内外边距,和表格布局有点类似但是也存在区别. 实现步骤如下: (1) 数据行.row 必须包含在容器.container 中 ...
- JDBC测试计划-连接mysql
一.测试环境准备 mysql:5.5 JDBC驱动:mysql-connector-java-5.1.30.jar 文件复制到JMeter/lib目录下 JMeter:jmeter-3.2 ...
- ROC AUC
1.什么是性能度量? 我们都知道机器学习要建模,但是对于模型性能的好坏(即模型的泛化能力),我们并不知道是怎样的,很可能这个模型就是一个差的模型,泛化能力弱,对测试集不能很好的预测或分类.那么如何知道 ...