• Python基本语法 打开文件


    打开文件的操作

    数据是写在文件里面的,open file 可以实现  读取数据  写入数据

    一般的文件操作步骤:

    1. 先打开文件
    2. 读取文件数据
    3. 写入数据
    4. 关闭文件

    注意:文件打开后,最后一定要记得关闭文件,否则会引起很多问题

    1.打开文件,使用的方法为open() 内置函数

    f=open('文件名称/文件路径')

    2.读取文件:

    f.read()    就可以读取文件所有数据(读取的数据类型为字符串)

    读取的方法有:

    mode='r'  读取模式   (一般默认的模式为:读取模式) 所以,如果是进行文件读取,可以默认不传,但是前提必须是,读取时,文件必须存在,否则会报错

    mode='rb'  也是读取模式,不过一般是以二进制格式打开一个文件,用于读写。一般用于非文本文件,例如图片

    #打开文件
    f = open('python_test.txt')#如果你读取的是同一个文件夹下,不需要加路径,不同文件下,需要加上详细的路径信息
    #读取数据
    data = f.read()#read 读取出来的数据是字符串
    print(data)
    print(type(data))  #打开文件读取出来的数据为字符串类型
    #关闭文件 f.close()

    输出结果为:
    <class 'str'>

    如果想将返回的字符串数据,存放在一个列表里面,方便后续处理,可以使用之前字符串的一个方法,split() 分割

    split()  内置函数返回的结果为,字符串列表(分割后的参数为字符串形式,存储在列表内)----可以自行实践

    new_data = data.split('
    ') #将返回的字符串以换行符进行切割存储
    print(new_data)

    3.写入文件

    文件不存在(就是在一个新的文件里面,写入需要写入的数据)

    • mode='w'     覆盖模式
      • 在w模式下,如果之前没有这个文件,将会在传入的路径下创建一个新的文件
        #使用默认的mode='r'模式
        file=open('data.txt')    #执行会报错
        
        #使用mode='w'模式,写入除中文以外的字符,可以使用
        file=open('data.txt',mode='w')#可以在当前路径下创建一个新的文件;data.txt
        
        
        #如果要在文件里面写入中文,需要设置编码格式     encoding=utf-8,否则会乱码
        
        file = open('new_file.txt','w',encoding= 'utf-8')#添加编码格式encoding='utf-8'
        #写入数据
        file.write('这是一篇很好的文章')
        #关闭文件
        file.close()
      • 使用格式说明
      1. 使用open()内置函数打开文件,进行操作的过程中,不需要传入关键字mode,只需要传入对应的读取模式就行
      2. 原因是:open函数的源码部分,传入的参数位置:def open(file,mode ='r',buffering = None,encoding = None,......)
      3. 其中,mode为第二个位置参数,所以可以不用写,但是其他的需要传入,不然会报错,例如,常用的encoding位置参数

           注意事项:如果之前已经存在相同名称的文件,使用mode='w'模式,会覆盖之前的文件内用,所以使用时需要很谨慎

    • 如何解决被覆盖的问题
      • mode='a'    追加模式
      • 在a模式下,如果之前不存在的文件,会创建新的文件,且在每运行一次后,将新写入的内容追加到文档的最后位置
      • mode='b'  二进制模式    不能单独使用,要跟r,w组合使用,其中,图片就是的使用二进制打开和存储的
        file = open('你好.png',mode='rb')
        #读数据
        print(file.read())#打印出一串16进制的数字
        #关闭文件
        file.close()
      • mode='t'  文本模式    上面说的mode='r',实际上就是mode='rt',因为默认都是用txt打开
      • mode='+'  加模式  组合使用      r+ :可读可写,其中可写为追加模式
        file = open('new_file.txt',mode='r+',encoding= 'utf-8')
        file.read()#先读
        #写入数据
        file.write('这是一本很有意思的书')#再写
        #关闭文件
        file.close()

    4.文件的操作之   seek

    seek:表示光标在哪里

    • 打开一个文件时,光标在最开始的位置
    • 打开一个文件,w+的模式写入一些数据,但是没有关闭文件。再次读取时,不会读取到数据,因为此时的光标在最末尾(所以,一定要注意,打开文件,操作完成后,一定要关闭文件,再进行下一步操作
    • #此操作读取不到文件数据
      f = open('demo.txt','w+')#'w+'可以同时具备可读可写能力
      f.write('new line')
      print(f.read())
      #打开文件,操作完成后,关闭文件,再打开操作,就可以读取到最新数据
      f = open('demo.txt','w+')
      f.write('new line')
      f.close()
      f = open('demo.txt','r')
      print(f.read())
      #结果:new line

    5.readlines  读取每一行,会存放在列表当中,每一行的数据就是列表的一个元素

       read    读取的数据是一整个字符串

    #使用read()  读取全部数据
    file=open('data.txt',encoding='utf-8')
    data=file.read()
    print(data)
    print(type(data))
    
    输出结果:
    这是第一行内容
    这是第二行内容
    这是第三行内容
    <class 'str'>
    
    
    #使用readlines()  读取数据
    data1=file.readlines()
    print(data1)
    print(type(data1))
    
    输出结果:
    ['这是第一行内容
    ', '这是第二行内容
    ', '这是第三行内容']
    <class 'list'>

    readlines()  方法取出的数据为字符串,且存储在列表当中,且字符串末尾存在一个换行符,如果想要将返回的数据取出换行符,可以使用for循环进行遍历,取出每个字符串,然后使用字符串的strip() 方法,去除字符串首尾空格或者是换行符

    方法二:使用enumerate() 方法  (可以多多了解,工作当中很实用)

    file=open('data.txt',encoding='utf-8')
    
    data1=file.readlines()
    print(data1)
    print(type(data1))
    for line,data in enumerate(data1):
        if line == len(data1)-1:
            print(data)    #根据数据对应的下标位置,获取对应数据
        else:
            print(data[:-1])
    
    输出结果:
    这是第一行内容
    这是第二行内容
    这是第三行内容

    6.with语句:可以让我们节省关闭文件的操作

    首先,工作当中,我们经常遇到一些任务,可能事先需要设置,事后再做清理的工作。对于这种场景,Python的with语句提供了一个非常方便的处理方式。一个很好的例子就是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄(此方法就是防止,书写过程中,忘记关闭文件,而导致报错)

    with语句的语法:

    with open(file)  as  filename:

    使用方法:

    with  open('data.txt')  as f:

       data= f.read()

       data1=f.readlines()

  • 相关阅读:
    Linux安装Gradle
    MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
    Websocket实现即时通讯
    Java线程池的使用
    Html5视频播放器-VideoJS+Audio标签实现视频,音频及字幕同步播放
    几种常用的认证机制
    Spring 接口参数加密传输
    Java 三种方式实现接口校验
    Spring AOP实现 Bean字段合法性校验
    RabbitMQ进程结构分析与性能调优
  • 原文地址:https://www.cnblogs.com/lucky1212/p/13996215.html
Copyright © 2020-2023  润新知