• 【python之路19】文件操作


    一、打开文件

    文件句柄 = open('文件路径', '模式')

    打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

    打开文件的模式有:

    • r ,只读模式【默认】
    • w,只写模式【不可读;不存在则创建;存在则清空内容;】
    • x, 只写模式【不可读;不存在则创建,存在则报错】
    • a, 追加模式【可读;   不存在则创建;存在则只追加内容;】
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    f = open('history.log','r') #以只读模式打开文件
    data = f.read()    #读取内容并赋值给data
    f.close()
    print(data)
    #!usr/bin/env python
    # -*- coding:utf-8 -*-
    f = open('history1.log','w',encoding='utf-8') #以只写模式打开文件,因为找不到文件,此时会创建history1.log
    data = f.write('你好')    #读取内容并赋值给data
    f.close()

    "+" 表示可以同时读写某个文件

    • r+, 读写【可读,可写】
    • w+,写读【可读,可写】
    • x+ ,写读【可读,可写】
    • a+, 写读【可读,可写】

     "b"表示以字节的方式操作

    • rb  或 r+b
    • wb 或 w+b
    • xb 或 w+b
    • ab 或 a+b

     注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

    可以用seek()和 tell()函数进行测试各个打开方式的不同,两个函数分别是:移动指针的位置、返回当前指针位置

    1、r+的打开方式总结:

    1)打开文件时,原文件中的内容不变

    2)打开文件后,指针默认的位置处于0,此时写入数据从开始写入,覆盖后面的数据,如果是读取数据是从开始读取

    3)可以读也可以写

    4)只要读一次,不管读几个字符,写入的时候就会在尾部进行追加数据。所以读取数据后要想从开头或中间写入数据,需要用seek()改变指针位置。

    f = open('history1.log','r+',encoding='utf-8') #history1中的内容为:hello,what is your name
    print(f.tell())  #文件中的内容未变,返回0。说明:打开文件后当前指针为0的位置
    data = f.read()
    print(data)  #返回:hello,what is your name说明默认从0的位置读到末尾,此时指针在最后
    f.write("my name is sunshuhai") #文件中的内容变为:hello,what is your namemy name is sunshuhai
    f.close

    2、w+的打开方式总结

    1)如果文件存在,则打开原文件,并把原文件内容清空;如果文件不存在,则建立该空文件

    2)指针指向0

    3)写入后可以进行读取,需要用seek()移动指针的位置才能读取

    f = open('history1.log','w+',encoding='utf-8') #history1中的内容为:hello,what is your name
    print(f.tell()) #打开时文件中的内容被清空,此时指针处于0位置
    
    f1 = open('history2.log','w+',encoding='utf-8') #history2不存在该文件,运行代码后会自动创建history2.log文件

    3、x+的打开方式总结

    1)如果文件已经存在则报错,如果文件不存在则会创建新的文件

    2)写入后可以进行读取,写入后指针处于最后,需要用seek()移动指针的位置才能读取

    f = open('history1.log','x+',encoding='utf-8') #history1中的内容为:hello,what is your name
    print(f.tell()) 
    f.close() #报错,因为文件已经存在
    f1 = open('history3.log','x+',encoding='utf-8') #history3不存在该文件,运行代码后会自动创建history3.log文件

    4、a+的打开方式总结

    1)如果文件已经存在则打开,如果不存在则创建

    2)打开后原来的文件内容不变

    3)默认的指针位置在最后

    4)可以进行读和写

    f = open('history1.log','a+',encoding='utf-8') #不存在则创建,存在则打开,此时history1.log中的内容为hello,what is your name
    print(f.tell()) #返回23,说明:追加模式打开,指针会默认移到最后
    data = f.read()
    print(data) #返回空,因为指针在最后,所以读取不到数据
    f.write('你好') #此时内容为:hello,what is your name你好
    f.close()

     二、文件操作的主要功能函数

    f = open('history1.log','r+',encoding='utf-8')
    f.close() #关闭文件
    f.flush() #在文件关闭前,就把写入的内容刷到硬盘
    f.read(n) #默认则读取文件的全部内容,加参数则读取前几个字符(如果以b的方式打开则读取几个字节)
    f.readline() #按行读取,默认读取当前指针所在的行
    f.seek(n) #调整指针的位置,把指针放在n个字节处
    f.tell() #获取指针的位置
    f.truncate() #截取开始至当前指针位置中的内容,其他内容则删除
    f.write() #向文件中写入内容

     seek(0)表示移动到开头,移动到结尾: seek(0,2) seek的第⼆个参数表⽰的是从哪个位置进⾏偏移, 默认是0, 表 ⽰开头, 1表⽰当前位置, 2表⽰结尾

    f.readlines()  #把所有的行读入列表中,如果文件中的行数很多,内存消耗会很大,适应于行数较少的问件
    f.xreadline()  #2.x系列才有,生成文件每行的迭代器,相当于for i in f:

    for循环打印输出文件的每一行:

    f = open('history2.log','r+',encoding='utf-8')
    for line in f:
        print(line)  #循环打印输出每一行

     三、with文件打开方式

    用with打开文件,with会自动给关闭,无需用f.close()

    用with可以同时打开两个文件

    with open('history2.log','r+',encoding='utf-8') as f:
        data = f.read()
        print(data)#最后无需f.close(),with语句会自动给关闭文件
    #python2.7及以后版本支持同时打开多个文件
    with open('history1.log','r+',encoding='utf-8') as f1,open('history2.log','r',encoding='utf-8') as f2:
        print(f1.read())
        print(f2.read())
  • 相关阅读:
    利用Bootstrap快速搭建个人响应式主页(附演示+源码)
    Socket实现仿QQ聊天(可部署于广域网)附源码(2)-服务器搭建
    Socket实现仿QQ聊天(可部署于广域网)附源码(1)-简介
    开拓思维,如何用编程思想进行三维建模(2)
    开拓思维,如何用编程思想进行三维建模(1)
    浅谈Winform事件的实现以及模拟其事件的实现(附实现源码)
    Winform实现Shp-栅格图形文件的读取与显示(外加shp转WKB格式存入oracle)附源码
    本地MVC项目发布到IIS服务器
    Asp.net mvc4 安装报错处理方法(x80070005 拒绝访)
    MySql 主从复制及主主复制
  • 原文地址:https://www.cnblogs.com/sunshuhai/p/6345167.html
Copyright © 2020-2023  润新知