• python文件操作


    文件操作介绍

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

    打开文件的模式有:

    • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
    • w,只写模式【不可读;不存在则创建;存在则清空内容】
    • x, 只写模式【不可读;不存在则创建,存在则报错】
    • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

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

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

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

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

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

    Table 文件对象方法

    方法 描述
    f.close() 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。
    f.fileno() 获得文件描述符,是一个数字
    f.flush() 刷新输出缓存
    f.isatty() 如果文件是一个交互终端,则返回True,否则返回False。
    f.read([count]) 读出文件,如果有count,则读出count个字节。
    f.readline() 读出一行信息。
    f.readlines() 读出所有行,也就是读出整个文件的信息。
    f.seek(offset[,where]) 把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。
    f.tell() 获得文件指针位置。
    f.truncate([size]) 截取文件,使文件的大小为size。
    f.write(string) 把string字符串写入文件。
    f.writelines(list) 把list中的字符串一行一行地写入文件,是连续写入文件,没有换行。

     read(3)代表读取3个字符,其余的文件内光标移动是以字节为单位,如:seek,tell,read,truncate

    f.flush()      #讲文件内容从内存刷到硬盘(python3.x)

    f.closed       #文件如果关闭则返回True

    f.encoding   #查看使用open打开文件的编码

    f.tell()         #查看文件处理当前的光标位置

    f.seek(3)     #从开头开始算,将光标移动到第三个字节

    f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写方式打开,但是w和w+除外。

    文件操作

    读文件

    • f是一个文件句柄,文件内存对像包含 (文件名,字符集,大小,硬盘的起启位置)
    • 当读了一行之后,光标会移动到该行最末尾

    普通读取

    f = open('lyrics') #打开文件
    first_line = f.readline()  #读取一行信息
    
    data = f.read()# 读取所有内容,文件大时不要用
    print(data) #打印文件
    f.close() #关闭文件

    对二进制的内容进行读写

    f = open("yesterday2",'wb')  #文件句柄  二进制文件
    f.write("hello binary
    ".encode())
    f.close()

    高性能读取文件

    f=open('yesterday','r',encoding='utf-8') 
    for line  in f
        print(f.strip())
    f.close

    写入内容

    • 如果是空白的文件,那么以r写入内容
    • 如果是已经有内容的文件,那么一定要用追加的模式 如果用w模式会被清空后写入
    • 如果想修改文件,那么只能够新建一个文件,重新复制
    f=open('yesterday2','w',encoding='utf-8')
    f.write('nihao')
    f.close()

    seek()tell()

    seek():移动文件读取指针到指定位置

    语法:file.seek(offset,whence=0)

                  -->offset:偏移量,需要向前或向后移动的字节数,正往结束方向移动,负往开始方向移动。

                  -->whence:可选值,默认为0,这意味着绝对的文件定位,

                                                   1这意味着寻求相对于当前位置,

                                                    2表示相对于文件的末尾。

    tell():返回文件读取指针的位置

    f = open("yesterday2",'r',encoding="utf-8")
    print(f.tell())        #按字符计数
    #print(f.readline())   #按字符进行读取
    #print(f.read(5))      #只读5个字符
    print(f.tell()) 
    
    #回到第哪个字符
    f.seek(0)    #回到第0个字符
    f.seek(10)   #回到第10字符
    print(f.readline())

    读取最后一行

    f=open('yesterday2','rb')
    for i in f:
        offs = -10
        while True:
            f.seek(offs,2)  # 从最后一行往前找
            data = f.readlines()  #一行一行找
            if len(data) > 1:
                print('文件的最后一行是:%s' % (data[-1]).decode('utf-8'))  # 读取文件最后一行
                break
            offs *= 2    #相当于两倍文件的内容中查找
    f.close()

    flush 刷新 

    说明:写入的内容是存放在电脑的缓存中的,只有flush了一下,才会保存到硬盘中去。

    #刚写完一行内容,如果断电,他就没有写进去,断电内存中数据就会丢失。如果没有断电,数据还在内存的缓存中,需要刷新一下,才能写到硬盘中。

    #内存有一个大小限制,需要达到这个大小,才会把内存缓存中的内容写到硬盘中。

    进度条:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-      
    import sys,time
    
    for i in range(50):
        sys.stdout.write("#")
        sys.stdout.flush()
        time.sleep(0.1)

    truncate 截断文件

    • 默认从0开始截断
    • 需要截断某段内容seek移动光标,输入光标位置即可
    f = open("yesterday2",'a',encoding="utf-8")  #文件句柄
    f.seek(10)
    f.truncate(20)

    with上下文打开文件

    • with打开文件可以实现自动关闭
    • 内部打开文件时候执行__entry__方法
    • 执行结束后执行__exit__方法关闭文件等处理后续操作
    with open('log','r') as f:
    ...

    打开多个

    with open("yesterday2",'r',encoding="utf-8") as f ,
            open("yesterday2", 'r', encoding="utf-8") as f2:
        for line in f:
            print(line)

    参考:https://www.cnblogs.com/nulige/p/6037752.html

  • 相关阅读:
    DOM操作之获取HTML、文本和值
    DOM操作之属性和样式操作
    DOM节点的增删改查
    其他选择器
    属性过滤选择器
    Linux
    Linux
    Appium自动化(3)
    Appium自动化(2)
    Appium自动化(1)
  • 原文地址:https://www.cnblogs.com/chenxuming/p/9475192.html
Copyright © 2020-2023  润新知