def read()
转自https://www.cnblogs.com/xuyaping/p/7691845.html
文件操作
1.1 对文件操作流程
- 打开文件,得到文件句柄并赋值给一个变量
- 通过句柄对文件进行操作
- 关闭文件
现有文件如下:
昨夜寒蛩不住鸣。惊回千里梦,已三更。起来独自绕阶行。人悄悄,帘外月胧明。白首为功名,旧山松竹老,阻归程。欲将心事付瑶琴。知音少,弦断有谁听。
f = open('小重山') #打开文件 data=f.read()#获取文件内容 f.close() #关闭文件
注意 if in the win,hello文件是utf8保存的,打开文件时open函数是通过操作系统打开的文件,而win操作系统
默认的是gbk编码,所以直接打开会乱码,需要f=open('hello',encoding='utf8'),hello文件如果是gbk保存的,则直接打开即可。
1.2 文件打开模式
========= ===============================================================Character Meaning--------- ---------------------------------------------------------------'r' open for reading (default)'w' open for writing, truncating the file first'x' create a new file and open it for writing'a' open for writing, appending to the end of the file if it exists'b' binary mode't' text mode (default)'+' open a disk file for updating (reading and writing)'U' universal newline mode (deprecated)========= ===============================================================
先介绍三种最基本的模式:
# f = open('小重山2','w') #打开文件 # f = open('小重山2','a') #打开文件 # f.write('莫等闲1\n') # f.write('白了少年头2\n') # f.write('空悲切!3')
1.3 文件具体操作
操作方法介绍
f = open('小重山') #打开文件 # data1=f.read()#获取文件内容 # data2=f.read()#获取文件内容 # # print(data1) # print('...',data2) # data=f.read(5)#获取文件内容# data=f.readline() # data=f.readline() # print(f.__iter__().__next__()) # for i in range(5): # print(f.readline())# data=f.readlines()# for line in f.readlines(): # print(line)# 问题来了:打印所有行,另外第3行后面加上:'end 3' # for index,line in enumerate(f.readlines()): # if index==2: # line=''.join([line.strip(),'end 3']) # print(line.strip())#切记:以后我们一定都用下面这种 # count=0 # for line in f: # if count==3: # line=''.join([line.strip(),'end 3']) # print(line.strip()) # count+=1# print(f.tell()) # print(f.readline()) # print(f.tell())#tell对于英文字符就是占一个,中文字符占三个,区分与read()的不同. # print(f.read(5))#一个中文占三个字符 # print(f.tell()) # f.seek(0) # print(f.read(6))#read后不管是中文字符还是英文字符,都统一算一个单位,read(6),此刻就读了6个中文字符#terminal上操作: f = open('小重山2','w') # f.write('hello \n') # f.flush() # f.write('world')# 应用:进度条 # import time,sys # for i in range(30): # sys.stdout.write("*") # # sys.stdout.flush() # time.sleep(0.1)# f = open('小重山2','w') # f.truncate()#全部截断 # f.truncate(5)#全部截断# print(f.isatty()) # print(f.seekable()) # print(f.readable())f.close() #关闭文件
接下来我们继续扩展文件模式:
# f = open('小重山2','w') #打开文件 # f = open('小重山2','a') #打开文件 # f.write('莫等闲1\n') # f.write('白了少年头2\n') # f.write('空悲切!3')# f.close()#r+,w+模式 # f = open('小重山2','r+') #以读写模式打开文件 # print(f.read(5))#可读 # f.write('hello') # print('------') # print(f.read())# f = open('小重山2','w+') #以写读模式打开文件 # print(f.read(5))#什么都没有,因为先格式化了文本 # f.write('hello alex') # print(f.read())#还是read不到 # f.seek(0) # print(f.read())#w+与a+的区别在于是否在开始覆盖整个文件# ok,重点来了,我要给文本第三行后面加一行内容:'hello 岳飞!' # 有同学说,前面不是做过修改了吗? 大哥,刚才是修改内容后print,现在是对文件进行修改!!! # f = open('小重山2','r+') #以写读模式打开文件 # f.readline() # f.readline() # f.readline() # print(f.tell()) # f.write('hello 岳飞') # f.close() # 和想的不一样,不管事!那涉及到文件修改怎么办呢?# f_read = open('小重山','r') #以写读模式打开文件 # f_write = open('小重山_back','w') #以写读模式打开文件# count=0 # for line in f_read:# if count==3:# f_write.write('hello,岳飞\n')## else:# f_write.write(line)# another way:# if count==3:## line='hello,岳飞2\n'# f_write.write(line)# count+=1# #二进制模式 # f = open('小重山2','wb') #以二进制的形式读文件 # # f = open('小重山2','wb') #以二进制的形式写文件 # f.write('hello alvin!'.encode())#b'hello alvin!'就是一个二进制格式的数据,只是为了观看,没有显示成010101的形式
注意1: 无论是py2还是py3,在r+模式下都可以等量字节替换,但没有任何意义的!
注意2:有同学在这里会用readlines得到内容列表,再通过索引对相应内容进行修改,最后将列表重新写会该文件。
这种思路有一个很大的问题,数据若很大,你的内存会受不了的,而我们的方式则可以通过迭代器来优化这个过程。
补充:rb模式以及seek
在py2中:
#昨夜寒蛩不住鸣.f = open('test','r',) #以写读模式打开文件f.read(3)# f.seek(3) # print f.read(3) # 夜# f.seek(3,1) # print f.read(3) # 寒# f.seek(-4,2) # print f.read(3) # 鸣
在py3中:
# test: 昨夜寒蛩不住鸣.f = open('test','rb',) #以写读模式打开文件f.read(3)# f.seek(3) # print(f.read(3)) # b'\xe5\xa4\x9c'# f.seek(3,1) # print(f.read(3)) # b'\xe5\xaf\x92'# f.seek(-4,2) # print(f.read(3)) # b'\xe9\xb8\xa3'#总结: 在py3中,如果你想要字符数据,即用于观看的,则用r模式,这样我f.read到的数据是一个经过decode的 # unicode数据; 但是如果这个数据我并不需要看,而只是用于传输,比如文件上传,那么我并不需要decode # 直接传送bytes就好了,所以这个时候用rb模式.# 在py3中,有一条严格的线区分着bytes和unicode,比如seek的用法,在py2和py3里都是一个个字节的seek, # 但在py3里你就必须声明好了f的类型是rb,不允许再模糊.#建议: 以后再读写文件的时候直接用rb模式,需要decode的时候仔显示地去解码.
1.4 with语句
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:pass
如此方式,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:
with open('log1') as obj1, open('log2') as obj2:pass
def read()相关推荐
- def __init__(self)是什么意思_子类必须调用 super().__init__() 吗?
我新开了专栏 <恍然大明白>,如果关注 Python 底层实现,请移步 恍然大明白www.zhihu.com 今天遇到一个有意思的问题,小组一位小哥在开发中,遇到了传说中的 " ...
- 在python中使用关键字define定义函数_python自定义函数def的应用详解
这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...
- python 解决IndentationError: unexpected unindent的报错!和通用代码框架,import requests def getHTMLText(url)...的解释
python报错IndentationError: expected an indented block. 解决办法很简单,是脚本缩进的问题,检查脚本缩进是否有空格和tab混用的情况或者是缩进明显不对 ...
- python axis 1_科学网—Python初学之解读MDFA模块(2):解读 def rwalk(X, axis=-1) - 刘磊的博文...
初稿:2018-10-19 转载请注明:科研菜鸟:http://blog.sciencenet.cn/home.php?mod=spacecp&ac=blog Multifractal Det ...
- python中def _init_是什么意思_Python中self和__init__的含义与使用
原文地址https://blog.csdn.net/love666666shen/article/details/78189984 Python中的self 在Python中的类Class的代码中,常 ...
- python——def自定义函数的应用
def自定义函数: 1,自定义函数相当于局部变量,用了就没有了 def chengfa(i,j):print('你输入的乘法结果是:' + str(j*i))return(j*i) chengfa(5 ...
- python函数def里面嵌套def,python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l...
python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?,python嵌套,直接上代码def l(l 直接上代码def l(list): def d(): return list return d ...
- AES加密时抛出java.security.InvalidKeyException:#160;Illegal#160;key#160;size#160;or#160;def...
原文:AES加密时抛出java.security.InvalidKeyException: Illegal key size or def 使用AES加密时,当密钥大于128时,代码会抛出 java. ...
- Scala中val, lazy, def的区别
2019独角兽企业重金招聘Python工程师标准>>> val strVal = scala.io.Source.fromFile("test.txt").mkS ...
- python--lambda和def函数
1.Python lambda和Python def区别分析 Python支持一种有趣的语法,它允许你快速定义单行的最小函数.这些叫做lambda的函数,是从Lisp借用来的,可以用在任何需要函数的地 ...
最新文章
- 卧槽!什么神仙行业月入10万,人才缺口30万?
- perl 字符串删除末尾几个字符_Perl字符串处理函数大全
- OSS在private权限下的无参数访问(Nginx反向代理实现)
- SAP BDC 技术的分类(转)
- Python面向对象的三大特性
- Java黑皮书课后题第3章:3.10(游戏:加法测试)程序清单3-3随机产生一个减法问题。修改这个程序,随机产生一个计算两个小于100的整数的加法问题
- java学习(6):数据类型
- tensorflow单变量线性回归
- private、public、protected、internal修饰符的访问权限
- Google Perf Tools安装以及使用
- 一个词三个功能,较真人员少啊
- Linux网络抓包分析工具(tcpdump、wireshark)
- ChinaITLab-Linux工程师培训课程笔记6
- PHP LOL接口,电竞数据API接口|英雄联盟lol|联赛统计|API调用示例代码
- 指纹识别系统电路设计图集锦 —电路图天天读(200)
- 一个程序员的个人感悟
- 和风天气获取天气情况
- Hadoop集群配置
- 《零基础学C语言》光盘内容
- 使用mybatis的interceptor修改执行sql以及传入参数
热门文章
- Java 公历转农历,然后农历减一年(或者几天或者任意天),再把这个日期转成公历...
- iOS 拓展,icon,尺寸 开发系列 吕文翰
- 计算机毕业设计ssm家具商城hog7l系统+程序+源码+lw+远程部署
- 苹果于近日推送了 iOS 14.5 开发者预览版 Beta
- Scrapy错误-no active project Unknown command: crawl
- mysql 大写 小写_MySQL大写和小写问题
- 机器翻译和人工智能翻译,语言学与机器翻译
- Celery介绍--手机短信异步发送
- UNITY 5.2.1 发行说明 中文版
- Tinkpad T480设置U盘启动