python之文件处理的选项中描述错误的是,python之文件处理模块

  python之文件处理的选项中描述错误的是,python之文件处理模块

  Yyds干货库存

  前戏应用程序运行过程中产生的数据首先存储在内存中。如果你想永久保存,你必须把它保存在硬盘里。应用要操作硬件,必须经过操作系统,而文件就是操作系统提供给应用操作硬盘的虚拟概念。用户或应用程序对文件的操作是对操作系统进行调用,然后操作系统在硬盘上完成具体操作。

  文件操作的基本过程

  有了文件的概念,我们再也不需要考虑操作硬盘的细节,只需要关注操作文件的过程:

  # 1.打开文件,应用程序启动系统调用open(.)到操作系统。操作系统打开对应于硬盘空间的文件,并返回要赋给变量f的文件对象。

  A=open (a.txt , r ,编码= utf-8) #默认的打开方式是r。

  # 2.调用file对象下的读/写方法会被操作系统转换为读写硬盘。

  data=a.read()

  # 3.向操作系统发起文件关闭请求,以回收系统资源。

  a .关闭()

  资源恢复和上下文管理打开一个文件包含两个资源:应用程序的变量F和操作系统打开的文件。当一个文件完成时,与该文件相关的两个资源必须完全恢复。恢复方法是:

  1.a.close() #回收操作系统打开的文件资源。

  2.del a #在应用级回收变量,其中del a必须发生在a.close()之后,否则会导致操作系统打开的文件无法关闭,白白占用资源。而python的自动垃圾收集机制决定了我们不需要考虑del a,这就需要我们在操作完文件后记住a.close()。虽然我们强调了这一点,但是,大多数读者还是会不由自主地忘记a.close()。考虑到这一点,python提供了with关键字来帮助我们管理上下文。

  # 1,执行完子代码块后,with会自动执行a.close()

  用open(a.txt , w )作为f:

  及格

  # 2,可以用with同时打开多个文件,并用逗号分隔。

  用open(a.txt , r )作为read_f,open(b.txt , w )作为write_f:

  data=read_f.read()

  Write_f.write(data)指定操作文本文件的字符编码。a=打开(.)是操作系统打开的文件。如果打开一个文本文件,就会涉及到字符编码。如果没有为open指定编码,那么打开文本文件的默认编码显然是由操作系统决定的。操作系统会用自己的默认编码打开文件,在windows下是gbk,在linux下是utf-8。

  这使用了上一课提到的字符编码的知识:如果你想确保没有乱码,文件应该以它存储的任何方式打开。

  a=打开( a.txt , r ,编码=utf-8 )

  的文件操作模式控制文件读写操作的模式r(默认):只读。

  女:就写吧。

  答:只补充案例一:r模式的使用。

  # r只读模式:当文件不存在时,会报错,文件中的指针会直接跳转到文件的开头。

  用open(a.txt ,mode=r ,encoding=utf-8 )作为f:

  Res=f.read() #将文件的所有内容从硬盘读入内存,并赋给Res。

  实现用户认证功能。

  用户名=输入(用户名:)。条状()

  password=input(password:)。条状()

  用open(ruserinfo.txt , r ,encoding=utf8 )作为f:

  file_data=f.read() # lele123

  real_name,real_pwd=file_data.split( )

  如果用户名==真实姓名,密码==真实密码:

  打印(“登录成功”)

  破裂

  否则:

  打印(“错误的用户名或密码”)案例2:W模式的使用

  # w只写模式:当文件不存在时,会创建一个空文档;当文件存在时,文件将被清空,文件指针将运行到文件的开头。

  用open(b.txt ,mode=w ,encoding=utf-8 )作为f:

  F.write (Hello \n )

  F.write (Hello \n )

  F.write(大家好\n )

  f.write(111\n222\n333\n )

  #强调:

  # 1如果文件没有关闭,就连续写,写完的内容一定要跟着写之前的内容。

  # 2如果在W模式下重新打开文件,文件内容将被清空。案例3:模式的使用

  # a只追加写模式:文件不存在时会创建一个空文档,文件存在时文件指针会直接移动到文件末尾。

  用open(c.txt ,mode=a ,encoding=utf-8 )作为f:

  f.write(44444\n )

  f.write(55555\n )

  #强调W模式和A模式的异同:

  # 1相似性:如果打开的文件没有关闭,连续写入后新内容会一直跟随前一个。

  # 2区别:在模式A下重新打开文件,不会清空原文件,而是将文件指针直接移动到文件的末尾,新写入的内容总是写在末尾。

  #练习:实现注册功能:

  name=input(用户名:)。条状()

  pwd=input(密码:)。条状()

  用open(db1.txt ,mode=a ,encoding=utf-8 )作为f:

  信息=%s:%s\n %(名称,密码)

  案例4:模式的使用(理解)

  # r w a:可读和可写

  #在正常工作中,我们只使用r/w/a,只读或只写。一般情况下,我们不使用可读写模式来控制文件内容的读写模式。注意:tb模式不能单独使用,必须和R/W/A其中之一结合使用。

  t(默认):文本模式

  1.读写文件是基于字符串的。

  2.仅适用于文本文件。

  3.必须指定编码参数。

  二进制模式:

  1.读写文件以字节/二进制为单位。

  2.所有文件都可以作为目标。

  3.不得指定编码参数。案例1:T模式的使用

  # t mode:如果我们指定的文件打开模式是r/w/a,默认为rt/wt/at。

  用open(a.txt ,mode=rt ,encoding=utf-8 )作为f:

  res=f.read()

  Print(type(res)) #输出结果是:class str

  用open(a.txt ,mode=wt ,encoding=utf-8 )作为f:

  s=abc

  f . write #也必须是字符串类型。

  # Emphasis: T-mode只能用来操作文本文件。无论读写,都应该是以字符串为单位,而访问硬盘是以二进制的形式。指定T模式时,内部编解码情况2:B模式的使用为我们完成。

  # b:读和写都以二进制位为单位。

  用open(1.mp4 ,mode=rb )作为f:

  data=f.read()

  Print(type(data)) #输出结果是:class bytes

  用open(a.txt ,mode=wb )作为f:

  Msg=你好

  Res=msg.encode(utf-8) # res的类型是bytes

  F.write(res) #在B模式下只有bytes类型可以写入文件。

  #重点:B模式和t模式比较。

  1.在对纯文本文件的操作中,T模式帮助我们节省编解码,而B模式需要手动编解码,所以此时T模式更方便。

  2.非文本文件(如图片、视频、音频等)只能使用B模式。)

  #案例:编写复制工具

  Src_file=input(源文件路径:)。条状()

  Dst_file=input(目标文件路径:)。条状()

  with open(r%s %src_file,mode=rb )作为read_f,open(r%s %dst_file,mode=wb )作为write_f:

  对于read_f中的行:

  #打印(行)

  Write_f.write(line)操作文件的方法# read操作

  F.read() #读取所有内容,这个操作之后,文件指针会移动到文件的末尾。

  F.readline() #读取一行内容,光标移动到第二行的头。

  F.readlines() #读取每一行并存储在列表中。

  #强调:

  # f.read()和f.readlines()都是一次性将内容读入内容。如果内容太大,就会导致内存溢出。如果还想把所有内容都读入内存,就必须分几次读。有两种方法可以实现它:

  #模式1

  用open(a.txt ,mode=rt ,encoding=utf-8 )作为f:

  对于f中的行:

  Print(line) #一次只有一行内容被读入内存

  #模式2

  用open(1.mp4 ,mode=rb )作为f:

  虽然正确:

  Data=f.read(1024) #同时只有1024个字节被读入内存

  如果len(data)==0:

  破裂

  打印(数据)

  #写操作

  F.write(1111\n222\n) #对于在文本模式下编写,您需要编写自己的换行符。

  F.写( 1111 \ N222 \ n 。encode( UTF-8 )#对于B模式编写,需要自己写换行符。

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

  F.writelines([字节( 333 \ n ,编码= UTF-8 ), 444 \ n 。encode (UTF-8)]) # b模式,以了解f.readable() #文件是否可读。

  F.f.writable() #文件可读吗?

  F.f.closed #文件关闭了吗?

  F.encoding #如果文件打开方式是B,则没有这个属性。

  F.flush() #立即将文件的内容从内存刷到硬盘

  F.name主动控制文件中的指针移动#前提:文件中的指针移动以字节为单位,唯一的例外是T模式下的read(n),n,其中n以字符为单位。

  用open(a.txt ,mode=rt ,encoding=utf-8 )作为f:

  Data=f.read(3) #读取3个字符

  用open(a.txt ,mode=rb )作为f:

  Data=f.read(3) #在读取3个字节#之前,指针在文件中的移动是由读/写操作被动触发的。如果要读取文件中特定位置的数据,需要使用f.seek方法主动控制指针在文件中的移动。具体用法如下:

  # f.seek(指针移动的字节数,模式控制):

  #模式控制:

  # 0:默认模式,这意味着指针移动的字节数指的是文件的开头。

  # 1:此模式表示指针移动的字节数基于当前位置。

  # 2:此模式意味着指针移动的字节数基于文件末尾的位置。

  # Emphasis: 0模式可用于T或B模式,而1和2模式只能在B模式下用case: 0模式详细说明。

  # a.txt采用utf-8编码,内容如下(abc各1字节,中文“Hello”各3字节)

  你好abc

  # 0模式的使用

  用open(a.txt ,mode=rt ,encoding=utf-8 )作为f:

  F.seek(3,0) #引用文件的开头移动了3个字节。

  Print(f.tell()) #从文件开头开始检查当前文件指针的位置,输出结果为3。

  Print(f.read()) #从第三个字节读取到文件末尾,输出结果为:Hello

  #注意:T模式下,读取的内容会自动解码,所以必须保证读取的内容是完整的中文数据,否则解码会失败。

  用open(a.txt ,mode=rb )作为f:

  f.seek(6,0)

  Print (f.read()。decode( UTF-8 )#输出结果是:OK

  案例:1模式解释

  使用# 1模式

  用open(a.txt ,mode=rb )作为f:

  F.seek(3,1) #从当前位置向后移动3个字节,此时的当前位置是文件的开头。

  Print(f.tell()) #输出结果是:3

  F.seek(4,1) #从当前位置向后移动4个字节,而此时的当前位置是3

  Print(f.tell()) #输出结果为:7例:0模式详解

  # a.txt采用utf-8编码,内容如下(abc各1字节,中文“Hello”各3字节)

  你好abc

  # 2模式的使用

  用open(a.txt ,mode=rb )作为f:

  F.seek(0,2) #通过引用文件末尾移动0字节,即直接跳转到文件末尾。

  Print(f.tell()) #输出结果是:9

  F.seek(-3,2) #引用文件的末尾向前移动了3个字节。

  Print (f.read()。decode( UTF-8 )#输出结果是:OK

  #小练习:实现动态查看最新日志的效果(类似于tail -f)

  导入时间

  用open(access.log ,mode=rb )作为f:

  f.seek(0,2)

  虽然正确:

  line=f.readline()

  如果len(line)==0:

  #无内容

  时间.睡眠(0.5)

  否则:

  print(line.decode(utf-8 ),end= )

  文件#的修改文件a.txt的内容如下

  张译丹山东179 49 12344234523

  河北二丹163 57 13913453521

  王全丹山西153 62 18651433422

  #执行操作

  用open(a.txt ,mode=r t ,encoding=utf-8 )作为f:

  f .寻找(9)

  F.write(“女性导演”)

  #文件的修改内容如下

  张一蛋女导演179 49 12344234523

  河北二丹163 57 13913453521

  王全丹山西153 62 18651433422

  #强调:

  # 1,硬盘空间无法修改,硬盘中的数据通过用新内容覆盖旧内容来更新。

  # 2.内存中的数据可以修改。该文件对应于硬盘空间。硬盘不可修改的事实对应了文件的性质,所以我们可以看到文件的内容是可以修改的。是如何实现的?总的思路是将硬盘中的文件内容读入内存,修改后在内存中覆盖。具体实现方式分为两种:

  方法1:

  #实现思路:将文件的所有内容一次性读入内存,然后在内存中修改后覆盖写回原文件。

  #优点:在文件修改过程中,相同的数据只有一个副本。

  #缺点:会占用太多内存。

  用open(db.txt ,mode=rt ,encoding=utf-8 )作为f:

  data=f.read()

  用open(db.txt ,mode=wt ,encoding=utf-8 )作为f:

  F.写(数据。替换( lele , sb ))模式2:

  #实现思路:读取打开原文件,写入打开临时文件,逐行读取原文件内容,修改后写入临时文件,删除原文件,将临时文件重命名为原文件名。

  #优点:不会占用太多内存

  #缺点:在文档修改过程中保存了相同数据的两份副本。

  导入操作系统

  用open(db.txt ,mode=rt ,encoding=utf-8 )作为read_f,\

  打开( . db.txt.swap ,mode=wt ,encoding=utf-8 )作为wrife_f:

  对于read_f中的行:

  wrife_f.write(line.replace(SB , kevin ))

  os.remove(db.txt )

  os.rename(.db.txt.swap , db.txt )

  转载请联系作者获得授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: