• Python第十三节课-文件的读取和写入


    
    
    #20200930   文件的读取和写入
    # 1、文件的打开方式(主要针对文本文档)
    #2、文件内容读取
    #3、文件内容写入
    #4、文件扩展用法
    # 打开文件用open()函数
    # file_object = open(file_name,access_mode='r')
    #以上函数格式中各个命名代表的意思分别是:
    # file_name 文件路径:相对路径和绝对路径。
    #access_mode:
    # 读(定义时等于号指定的值,是缺省参数r)
    # 写
    # 读+写
    # 文件路径的写法:有三种 2、3中更常用
    # filename='G:/prthTest1,txt'
    # filename='G:\prthTest1,txt' #加两个\是为了取消转义
    # filename=r'G:prthTest1,txt' #r 取消转义 --只在python中用
    # file_object---简写fo
    # filename='J:\practice.txt'
    # fo = open(filename)#加入参数encoding='utf-8'表示读的编码是中文
    # # print(type(fo)) #打印对象类型,是个文件对象<class '_io.TextIOWrapper'>
    # print(fo) #打印这个文件对象得到结果如下,有几个参数
    ##<_io.TextIOWrapper name='J:\practice.txt' mode='r' encoding='cp936'>
    ##打印结果意思:这是一个文件对象,路径是J盘下的那个名字,模式是只读,编码是cp936,
    ##那如果想读中文编码怎么办呢? 在fo = open(filename)中加入参数encoding='utf-8'
    #文件的相对路径
    #如果是进程文件,不是全路径,如:
    # open('file1.txt) # open('./file1.txt')
    # open('fold1/file1.txt')
    # open('../file1.txt')
    #../../表示的是上级目录的上级目录,以此类推
    #相对于当前目录来寻找该文件,称之为相对路径

    ##文件内容读取
    # fo.read()函数 该函数返回的是str
    #文件模式--r
    # 只是为了读取文件而打开文件。文件指针在文件的开头。这也是缺省的文件打开方式,即
    #open('file') = open('file','r')
    # 注意文件指针的移动,最后的关闭操作
    #read()函数如果有具体读的长度,就读具体个数,写作: str1=foo.read(3)
    # filname ='J:\practice.txt' #记住要先给路径赋变量名
    # foo=open(filname,encoding='utf-8') #然后给open(路径变量名)这个函数赋予变量名
    # str1=foo.read(2) #str=函数变量名.read(3)
    # print(str1) #print(foo.rede(2)) 也是可以的 #打印结果:12(文件代码是123123123)
    # print(foo.read(2)) #打印结果是:31,为什么呢?
    #读了两个之后再读,是继续往后面读,因为光标的位置在第一次读之后移到了第三位前面
    #同理,第三次读全部的话,就是读23123
    #read()函数如果没有具体读的长度,就读全部,写作: str1=foo.read()
    # filname ='J:\practice.txt' #记住要先给路径赋变量名
    # foo=open(filname,encoding='utf-8') #然后给open(路径变量名)这个函数赋予变量名
    # str1=foo.read() #str=函数变量名.read()
    # print(str1) #打印结果:文件全部内容

    # 读了之后文件关闭
    # fo.close() #注意fo是文件对象,及open()函数赋予的变量名
    # 如果文件被关闭了再去读,也是会报错的 如下:
    # filname ='J:\practice.txt' #记住要先给路径赋变量名
    # foo=open(filname,encoding='utf-8')
    # #print(foo.read()) #读取的全部内容
    # foo.close()
    # print(foo.read()) #关闭了文件之后再去读取文件
    # #报错了ValueError: I/O operation on closed file.

    #---文件指针
    # 文件指针的概念:即读取文件时,光标标记的那个就是指针,光标标记着文件读取的位置
    # 指针就是接下来的读写操作开始的位置
    # 如何获取到文件指针的位置呢 tell()函数 eg:
    # filname ='J:\practice.txt' #记住要先给路径赋变量名
    # foo=open(filname,encoding='utf-8') #然后给open(路径变量名)这个函数赋予变量名
    # print(foo.tell())
    # print(foo.read(3)) #print(foo.rede(2)) 也是可以的 #打印结果:12(文件代码是123123123)
    # print(foo.tell()) #打印的光标位置是3,由此可见tell()函数获取到的光标位置是这一位的后面
    # print(foo.read(2))

    #--在代码中怎么移动光标达到读取文件指定内容呢?
    # 文件指针的移动 seek()函数 使用方法:
    # fo.seek(1,0) #seek()有两个参数:(移动到的位置,模式)
    # 0模式意思是永远从文件指针开始的地方计算,即从0开始
    # 0模式对应的是读'r'模式
    # fo.seek(x)扩展用法:(开发用的比较多,测试做了解)
    # 1模式是当前模式
    # 2模式是尾部模式 用法举例子:
    # filname ='J:\practice.txt' #记住要先给路径赋变量名
    # foo=open(filname,encoding='utf-8') #然后给open(路径变量名)这个函数赋予变量名
    # print(foo.tell())
    # print(foo.read(2))
    # print(foo.tell()) #这里的打印结果是2,表示指针移到了第二位后面
    # print(foo.seek(5,0)) #打印结果5,说明光标移到了第五位后面
    # print(foo.seek(5,1))
    # 报错can't do nonzero cur-relative seeks,说明seek的1模式不支持read模式,怎么办呢?
    # 以二进制方式去打开文件,seek的1模式和2模式都只支持二进制的.如下:
    # finame='J:\practice.txt'
    # foo=open(finame,'rb') #在open中添加参数'rb',表示已二进制方式打开文件
    # print(foo.seek(1,1)) #打印结果是2,表示指针在第二位的前面
    # print(foo.read(3)) #读的结果是b'231',b表示是以二进制读的,引号里面是读到的内容
    # #print(foo.seek(1,1)) #打印的是5,代表指针已经移到了第五位的前面
    # print(foo.seek(-1,1)) #打印结果是3,代表光标移到了第三位(因为读的时候读到的内容是1231,此时光标是在第四位)
    # #第96行注销了再读-1,-1代表指针往前面移一位
    # 将94-98都注销试试模式2:
    # print(foo.seek(0,2)) #移动到了文件的末尾 打印得9
    # print(foo.seek(-2,2)) #移动到了文件倒数第二个字符 打印得7,代表光标在第七位的后面
    # print(foo.read()) # 打印结果是b'23'
    # print(foo.seek(0)) #移动到头 打印得0
    # print(foo.read()) #b'123123123'
    # print(foo.seek(2,1)) #移动到当前指针往后两个字符,打印得11,因为之前读了文件全部内容,指针在第九位后面
    #--读一行怎么读? readline()函数
    # finame='J:\practice.txt'
    # foo=open(finame)
    #print(foo.readline()) #打印得:b'123123123'
    #--读多行怎么读? readlines()函数
    #print(foo.readlines()) #打印得:['22322 ', '323321']
    #读取多行返回的是list列表
    # 注:Windows--文件里面的换行是 两个长度
    #字符串和Linux里面的换行符都是 ,一个长度
    #--怎么去掉换行符呢?用splitlines()函数
    # print(foo.read().splitlines()) #打印得['123123123', '22322', '323321'],也是列表

    #2.文件的写的操作,如果文件不存在会新建,文件若存在会清空所有的内容
    # 使用场景:输出本次使用的详细信息
    # finame='J:\practice.txt'
    # foo=open(finame,'w') #文件已经被清空了
    # #写操作: 注意写入的是字符串
    # foo.write('asdfghj') #本质不是写在磁盘,而是写在缓存,要关闭或者刷新文件(保存)才能写入
    # foo.close() #关闭了,现在文件已经被写入了.功能同:foo.flush()
    #--追加a写法:即不清空文件而追加内容。用法如后图:
    # a:
    # 只是为了在文件末尾追加内容而打开文件
    # 如果文件存在,指针是在文件的末尾的
    # 如果文件不存在,则创建一个新文件
    # finame='J:\practice.txt'
    # #foo=open(finame)
    # #print(foo.read()) #先读一下文件内容:asdfghj
    # # 注销掉131-133行之后用a模式打开文件.
    # foo=open(finame,'a')
    # foo.write('这是追加的内容')
    # foo.flush()
    # --如果想换行写追加的内容怎么办?a模式下怎么换行呢?
    # 在追加的内容前面加上
    # foo.write(' 这是追加的内容')
    # foo.flush()
    # 文件的扩展用法,再学三种模式,r+.w+.a+
    # r+模式:为了读取并且写文件而打开文件,如果文件不存在会报错,文件的指针在文件的开头
    # w+模式:为了读取并且写文件而打开文件,如果文件不存在,会建立一个新的文件,如果文件已经
    # 存在,会清空文件内容,文件指针在文件的开头
    # fil='d:\ordinary.txt'
    # foa=open(fil,'w+',encoding='utf-8')
    # foa.write('新建了这个文件并写入了这段话')
    # a+模式:为了读取并且写入文件而打开文件,如果文件不存在,会建立一个新的文件,文件指针在
    # 文件的末尾,很多OS上写操作永远在文件结尾进行,不管是否用例seek
    # --如果需要同时打开多个文件怎么办?
    # --一次打开多个文件的优势:可以省略一个close()的操作
    # with open(文件路径) as 文件对象,open(文件路径) as 文件对象2
    #在缩进里面写文件操作的代码 eg:
    # fil='d:\ordinary.txt'和finame='J:\practice.txt' 现有这两个文件
    #
    # with open('d:\ordinary.txt','a',encoding='utf-8') as foo,open('J:\practice.txt','a',encoding='utf-8') as oa:
    # foo.write('批量打开的第一个文件')
    # oa.write('追加加载的批量打开的文件')
    # oa.flush()

  • 相关阅读:
    继承
    接口
    匿名内部类
    抽象类和接口的区别
    多态
    重载和覆写的区别|this和super区别
    Visual C# 2008+SQL Server 2005 数据库与网络开发――2.2.1 变量
    Visual C# 2008+SQL Server 2005 数据库与网络开发――2.3.1 选择语句
    Visual C# 2008+SQL Server 2005 数据库与网络开发―― 2.5错误和异常处理
    Visual C# 2008+SQL Server 2005 数据库与网络开发―― 2.3 语句
  • 原文地址:https://www.cnblogs.com/66-liu/p/13822106.html
Copyright © 2020-2023  润新知