范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python文件读写原理

  理解文件中的读取或者写入顺序要先知道对文件进行读写时它的工作模式:在python中对文件进行读写时,是依据文件中光标的位置进行读写的。
  这里就要引入seek()方法:
  seek(offset, whence)
  offset:开始的偏移量,也就是代表需要移动偏移的字节数
  whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;
  0 代表从文件开头开始算起
  1 代表从当前位置开始算起
  2 代表从文件末尾算起
  例子: with open("abc.txt", "r", encoding = "utf-8") as f    data = f.readline()    print(data)
  当我们用‘r’模式打开文件时,文件中的光标默认在第一个字符(注意是第一个字符,而不是第一行字符),当我们读取文件中的字符时,它是按照光标的位置进行读取的,对于
  data = f.readline() 来说就是当光标走到第一行字符的换行符时就停止了,并返回光标走过的字符串,在txt文件内每一行字符的末尾会有一个隐藏的换行符’ ’。
  此时我们对f使用seek()方法:f.seek(), 就可以改变文件内光标的位置了,以达到输出我们需要的字符的目的。
  用我的理解来说seek(offset, whence)方法:
  第一个参数就是把光标移动到当前的第几个字节(注意是字节,不是字符):
  第二个参数就是从哪里开始(就是第一个参数解释的当前):
  0 代表从文件开头开始算起。
  1 代表从当前位置开始算起。
  2 代表从文件末尾算起。
  例如:
  f.seek(3,0):就是把光标移动到文件的开头的第三个字节处。
  f.seek(5,1):就是把光标移动到文件当前位置的第五个字节处。
  f.seek(7,2):就是把光标移动到文件末尾的第七个字节处。
  对于utf-8编码来说一个汉字占3个字节。
  现在来说说对于不同的打开方式,文件光标所处的不同位置:
  r:只进行读的操作,需要文件存在,进行读操作时,文件的光标在开头的第一个字节。
  r+:即可读也可以写,需要文件存在。文件光标在开头的第一个字节,这里分为两种情况:
  第一种:先写后读:
  由于文件的光标处于开头第一个字节,这就导致了若原文件中光标的位置存在字符,则会被新写入的字符覆盖,即光标所到的位置如有字符则会被新字符覆盖,若光标所在的位置无字符,则写入新的字符。这里又产生了两种情况:
  a、若此时光标走到文件末尾,若此时进行读的操作会发现什么都读不出,因为光标已经走到文件末尾了,没有字符可以被读出来。
  b、若此时光标不在文件末尾,则会输出后续的字符。
  在这两种情况下,若你想读出此前写入的字符你便可以用f.seek(x,x)的方法移动光标。
  第二种:先读后写:
  与上诉类似,光标开始处于开头第一个字节处,读的时候顺着光标的移动读出字符,若走到文件末尾进行写则不会对原有字符进行覆盖,而是追加。若是光标所在位置有字符时,进行写入则是覆盖光标所在的字符。
  总结:"r’或者‘r+’模式下,文件的光标处于开头第一个字节处。
  ‘w’:只对文件进行全覆盖写入,若文件不存在,则会新建一个文件,文件光标处于文件开头。
  ‘w+’:可读可写(全覆盖),若文件不存在,则会新建一个文件,文件光标处于文件开头。这里也分为两种情况:
  第一种:先读后写:由于是’w+"方式打开文件,文件内容被清除,所以什么都读不出。
  第二种:先写后读:写入的字符会沿着光标为移动写入文件,写完后读会发现什么都读不出,因为此时光标处于末尾且光标指向的位置并无字符,此时可以f.seek()把光标移动到要读取的位置进行读操作。
  总结:在’w’,"w+"模式下当我们open()时,原文件内容会被清除,开始时光标处于开头第一个字节处。
  ‘a’:对文件进行追加,若文件不存在会新建文件,文件光标位于文件末尾。
  ’a+‘:可读可写,若文件不存在则会新建文件,文件光标处于文件末尾。分为两种情况:
  第一种:先读后写:
  由于文件光标处于末尾,所以什么都读不出,此时可以f.seek(),移动光标到读取位置,读完后若要进行写入操作,不管光标处有无字符,光标都会自动移动到末尾处进行追加,若此时又要读取,则在用一次f.seek()。
  第二种:先写后读:
  由于文件光标处于末尾,所以写入时进行追加,此时要读取,则在用f.seek()。
  总结:‘a’, "a+"模式下文件光标处于文件末尾,只要写入光标便会自动回到末尾,即只会追加。
  总结:在’w’,"w"+模式下当我们open()时,原文件内容会被清除,开始时光标处于开头第一个字节处。
  # encoding:utf-8# 文件读取操作fp=open("E:file.txt","r",encoding="utf-8" )data_read=fp.read()#一次性全部读完fp.seek(0,0)#游标移动到第一行,继续读,否则读取到的是空data_readlines=fp.readlines()fp.close()print(data_readlines)print(data_read)# 练习:统计文件中一行存在test的行数# 注:文件读取的时候,行的末尾包含回车换行符号 # 如果文件很大用readlines读取,小文件直接用read读取,read读取的是整个文件内容,readlines结果是listcount=0fp=open("e:file.txt","r",encoding="utf-8")lines=fp.readlines()for i in lines:    if "test" in i:        print(i)        count+=1print(count)# read() readlines() readline()的区别# read()—当成一个字符串读出# readlines()readlines返回的是列表# readline()一行一行读文件# 如果文件很大,用read()内存不够(如运维日志几十G)# 用readline来读超大文件#原则:内存在电脑中是个稀缺的资源,如果你占用大量内存,程序肯定不是最优的,小文件:read、readlines速度更快些模式w+:先清空所有文件内容,然后写入,然后你才可以读取你写入的内容r+:不清空内容,可以同时读和写入内容。 写入文件的最开始a+:追加写,所有写入的内容都在文件的最后# a+fp=open("e:file.txt","a",encoding="utf-8")fp.write("hello python")fp.close()fp=open("e:file.txt","r",encoding="utf-8")data=fp.read()fp.close()print(data)w+#此时不需要关闭文件,w+ 可读可写(清空再写),文件不存在就创建,r+可读可写不存在报错fp=open("e:file.txt","w+",encoding="utf-8")fp.write("hello python")fp.seek(0,0)data=fp.read()fp.close()print(data)#此时不需要关闭文件,a+ 可读可写(末尾追加再写),文件不存在就创建,r+可读可写不存在报错fp=open("e:file.txt","a+",encoding="utf-8")fp.write(" hello python1")# 用来换行fp.seek(0,0)data=fp.read()fp.close()print(data)# 关于open()的mode参数:# "r":读# "w":写# "a":追加# "r+" == r+w(可读可写,文件若不存在就报错(IOError))# "w+" == w+r(可读可写,文件若不存在就创建)# "a+" ==a+r(可追加可写,文件若不存在就创建)# 对应的,如果是二进制文件,就都加一个b就好啦:# "rb"  "wb"  "ab"  "rb+"  "wb+"  "ab+"seek(offset,whence)seek()offset:坐标  正数表示从前向后    负数表示从后向前    0表示最开始的游标whence:0,1,2 0表示从文件最开始位置,0,01:表示从当前位置开始,基于当前的相对位置,来重置坐标。10   seek(5,1) 10-->5,现在的坐标是152:表示从文件的末尾开始,做相对位置,来重置坐标   seek(-5,2)-->末尾向前数5个字符。注意;:1和2使用基于rb模式注意:这个文件指针的改变只是作用于"r",对"w"和"a"不会起作用,如果是"w",那么write()永远都是从开头写(会覆盖后面对应位置的内容),是"a"的话write()就永远都是从最后开始追加。fp=open("e:file.txt","rb")data=fp.readlines()print(fp.tell())fp.seek(-8,1)data1=fp.readlines()fp.close()print("data:",data)print("data1:",data1)

oppo才是真大哥?新专利跳过屏下镜头阶段,恐怕又要惹跟风了作为国产四大手机厂商之一,OPPO这些年在发明专利上,可谓是下足了功夫,在国家知识产权局公布的2020年上半年国内发明专利授权量中,OPPO以1925件排在了全国第二,发明专利授权从销售到百亿女富豪,董明珠为何会被家谱除名?薇娅我也经历过提起国内的女企业家,大家的第一反应就是董明珠。董明珠雷厉风行的行事风格,被网友们称为铁娘子。董明珠的能力是有目共睹的,刚进入格力时还只是个跑业务的销售,凭借自己的努力一步一步往上爬碎屏克星小米11!200斤重压未破极限,钢化膜都省了手机作为我们时时刻刻带在身上的实用神器,总是让人忍不住把它落下,以至于跟它相处的时间远比恋人来得多,真真切切地演绎了什么叫捧在手心呵护的心肝宝贝。为了给它提供更好的保护,我们都额外学习暴雪!雷军10年前的喊话,隐藏了MIUI比肩iOS的秘诀12月28日晚的发布会,亮点实在是太多,除了焊死车门的3999,把选择权交还给用户的真环保,还有体验飞跃提升的MIUI12。5版本。这次的MIUI12。5,对SystemUI进行了小米11真机上手,深度解析选择它的3个理由千盼万盼,总算是盼来了小米11,作为一款开年的旗舰机,小米11到底有着怎么样的优势和竞争力呢?一起来看看。首先是性能,搭载全球首发骁龙888处理器,可以说是安卓机的性能天花板,更不iQOO7销量堪忧?发布会全程被腿吸引,卢伟冰表现实属狡猾作为2021年手新机的先锋队,iQOO7的发布,期待值实在是高。近年来,iQOO品牌在手机市场上,可谓是出尽风头。在诞生至今不到两年,就已经迅速成长为家喻户晓的手机品牌,其极致强悍小米有品汽车保养专家,3。9米自由伸缩,30分钟打五个作为一家专注于智能硬件智能家居以及软件开发的企业,小米自创立以来就给大家带来了很多高性价比的科技产品。从最早的三驾马车(MIUI手机米聊)起步,小米逐步做大做强,形成了自有的生态链火极一时的九宫格解锁,被唾弃毫无用处,但黑客却根本破解不了在智能手机发展至今,人们对它的依赖已经是越来越大了,不管是生活还是工作,手机都是非常好的一个工具,同时这也意味着手机的安全性越来越重要,所以厂商们在对于手机解锁也设置了相当多的内容负债48亿,债主上门随地大小便,员工卖房帮他还钱,如今是首富每个成功的企业家,背后都会历经为人不知的酸楚,才会有后面的成功。马云创业失败4次,账上曾仅剩200元马化腾假扮姑娘陪聊,想卖QQ没人要任正非有半年时间都是噩梦,半夜常常哭醒张一鸣1厚不过三个硬币的手机潮流,被性能一举打破,造就了小米11自从摩托罗拉发明第一台手机开始,为了有更好的握持手感与便携性,手机的尺寸都是在不断的缩小。在智能机兴起的前几年,全球最薄的手机机身厚度才只有4。75mm,差不多两个半硬币的厚度,但市场一跌,你就知道资产配置的重要性了!大家好,我是老李。今天我们来聊聊资产配置。这几天市场跌得又开始怀疑人生了!很多人都知道不要把鸡蛋放在一个篮子里,但是很多人不知道,放了很多鸡蛋的篮子它们没准在一辆车上!因此在市场大
威马W6起步16。98万,最高续航620KM,支持无人驾驶对于纯电动车型来讲,价格上要足够经济,续航上要足够给力,才能进入寻常百姓家。国产造车新势力近几年表现确实很棒,今天要跟大家聊的是一款中型纯电动SUV,它的名字叫做威马W6。从价格上最环保国家挪威电动车占比超过83,最畅销的是福特MachE我们都知道中国是全球电动车销售第一大国,指的是整体销量世界第一,不过论电动车占新车销量的比例,那挪威绝对是世界第一,无人能及。5月,挪威的电动车销量再次翻番,创下新纪录,电动车新车小鹏汽车主打智能标签揭秘P7高速NGP表现本报记者高沛通赵毅广州报道作为国内头部造车新势力,小鹏汽车以智能汽车作为自身的核心差异化能力。智能汽车在当下阶段,与传统汽车的最大不同,同时也是最能体现车企技术水平的,便为自动驾驶台积电公布最新技术进展!3nm明年量产,汽车射频芯片制程也升级本周,台积电举办了2021年技术研讨会,分享其先进逻辑技术特殊技术3DFabric先进封装与芯片堆叠等方面的最新进展,由于疫情尚未平复,台积电依然沿用去年的线上模式举办这次论坛。数高通给华为雪中送炭?苹果手机又迎来新一轮降价潮关于全球芯片缺货的问题,很大程度上影响着依赖于芯片生存的厂商们,像智能手机就是最明显的例子。比如芯片问题就让华为的发展之路走得不那么顺畅,虽然我们相信被卡脖子的难关终将解决,但是也开箱上手体验华为WATCH3手表旗舰真的不一样TA回来了!此前华为宣布将在6月2日召开华为新品发布会时,我就在深深的期待,谁会为HarmonyOS打响第一枪?今天谜底揭晓,华为WATCH3系列旗舰归来。对于一款2015年即发布华为watch3发布搭载鸿蒙系统,支持eSIM独立通话(齐鲁晚报齐鲁壹点记者冯子涵)搭载了全新HarmonyOS的智能手表HUAWEIWatch3同时发布。华为WATCH3拥有全新3D旋转表冠,不锈钢表体,1。43英寸AMPLED屏幕开始洗白?iPhone13传来消息,大电池已经到位众所周知,苹果手机一直以高性能优质的形象示人,并且会带来全新版版本的系统和电池容量,并且每一款新机都会让人产生期待与关注。然而比较可惜的是,每年的苹果手机在升级幅度上都非常小,尤其数字人民币接入支付宝,碰一碰与扫一扫同场竞技文胡小凤编辑顾彦进入2021年,数字人民币试点与推广提速,接入六大国有行和网商银行,支付宝借助网商银行打通数字人民币支付。部分用户打开支付宝我的界面,就可以看到数字人民币。用户通过麒麟9000芯片供应不足是造成华为P50发布的重要原因吗?华为P系列与Mate系列是华为最高端与最优秀的两种类型的手机,并且这两种类型的手机在定位上就属于高端机。在正常情况下P系列大约在每年的34月份发布,Mate系列会在1011月份发布为什么日本科技发达,却没一个销量好全球知名的手机品牌?一网友问为什么日本科技发达,却没一个销量好全球知名的手机品牌?是啊,按日本的科技发达程度,理应会有像iPhone三星小米华为OPPOvivo这样的全球知名(销量好)手机品牌。但为什