zoukankan      html  css  js  c++  java
  • python文件处理

    (1)操作文件的流程:

    #1. 打开文件,得到文件句柄并赋值给一个变量;#2. 通过句柄对文件进行操作;#3. 关闭文件

    f=open('王强',encoding='utf-8')
    data=f.read()
    print(data)
    f.close()

    open('王强',encoding='utf-8')就相当于文件句柄;'王强'是跟当前文件同属于一个目录下的文件名,相当于传入一个相对路径;

    open()函数检索当前系统的编码,windows系统编码为GBK,故open函数默认以GBK的形式进行解码。以什么方式储存就以什么方式进行解码打开;

    open默认打开的是只读模式

    (2)文件处理读操作

    r模式:只读

    readable():判断文件是否只读,返回布尔值

    f=open('王强','r',encoding='utf-8')
    data=f.read()
    print(data)
    print('第1行',f.readline(),end='')

    #print('第1行',f.readline(),end=''):只读取一行,依次往下读,类似于光标的移动,readline一次,光标往下移动一行

    readline每读取一行都会进行换行,有一行空内容,end=''可以取消换行

    readlines():将文件中的内容全部读取并放在一个列表里面

    f=open('王强',encoding='utf-8')
    data=f.readlines()
    print(data)
    f.close()

    (3)文件写操作

    w模式:只写

    f=open('王强','w',encoding='utf8')
    f.write('11111111
    ')   #换行需要添加换行符
    f.write('222222222
    ')
    f.write('333
    4444
    555
    ')
    f.close()

    只写模式,如果文件存在会将文件内容清空,进行写下面的操作;如果文件不存在,会新建一个新文件

    writable() :判断是否可写

    writelines() :以列表的方式传入字符串内容

    f=open('王强','w',encoding='utf8')
    f.writelines(['555
    ','6666
    '])   
    f.writelines(['555
    ','6666
    ',1]) 
    f.close()

     文件内容只能是字符串,只能写字符串

    (4)文件追加操作

    a模式:追加。实际上就是可写,只是不对文件内容做清空处理,以追加的模式写到文件最后

    f=open('王强','a',encoding='utf-8')
    f.write('写到文件最后')
    close()

    (5)文件处理b模式

     rb:以二进制的方式进行读取,读取的结果是一堆二进制字节

    f=open('test11.py','rb')
    data=f.read()
    print(data)
    print(data.decode('utf-8'))   #再将字节以utf-8的方式解码成字符串
    f.close()

    运行结果为:b'11111 22222 33333 44444

    windows平台当中,回车是 ;b的方式不能指定编码

    '字符串'---------encode---------》bytes;bytes---------decode---------》'字符串'

    wb:以二进制字节的方式进行写入

    f=open('test22.py','wb')
    f.write(bytes('1111
    ',encoding='utf-8'))
    f.write('王强'.encode('utf-8'))          #两种编码形式

    ab:以二进制字节的方式进行写入文件的最后一个位置

    (6)文件处理其他模式

    r+:可读加可写

    文件修改,实质上是对文件内容的覆盖

    src_f=open('王强','r',encoding='utf-8')
    data=src_f.readlines()
    src_f.close()
    print(data)
    dst_f=open('王强','w',encoding='utf-8')
    dst_f.write(data[0])
    dst_f.close()

    命令相当于对‘王强’这个文件的内容进行修改,只保留第一行的内容

     with:将文件句柄和变量进行合一,且不用关闭文件

    src_f=open('xxx','r',encoding='gbk')
    dst_f=open('xxx','w',encoding='gbk')

    若用with执行

    with open('xxx','r',encoding='gbk') as src_f,
            open('xxx_new','w',encoding='gbk') as dst_f:
        data=src_f.read()
        dst_f.write(data)

     (6)文件操作的其他方法

    encoding():获取open打开的编码,不是文件的存入编码

    flush():将内存的数据保存到硬盘中

    read():读取文件内容

    tell():文件中光标所在位置,windows中换行符为 占两个字符

    newline='':读取文件中真正的换行符

    f=open('b.txt','r+',encoding='utf-8',newline='') ,此时读取的换行符为 ;若不加newline='',读取的换行符则为

    seek():控制光标的移动,默认从文件的起始位置计算

    truncate():文件截断,把截断范围外的内容全都删去了

    对于文件中光标的移动规则:

    一:read(3):

      1. 文件打开方式为文本模式时,代表读取3个字符

      2. 文件打开方式为b模式时,代表读取3个字节

    二:其余的文件内光标移动都是以字节为单位如seek,tell,truncate

    注意:

      1. seek有三种移动方式0,1,2,其中1(相对上一次光标的位置seek)

    和2(倒着seek,显示光标以后的所有内容)必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

      2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

    (7)读取大文件中的最后一行

    f=open('日志文件','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
  • 相关阅读:
    弹性布局、动画、过渡
    HTML
    数据库对象
    函数
    oracle与PL/SQL安装
    网络编程
    多线程
    联调接口
    vue 全局变量
    vue ajax请求
  • 原文地址:https://www.cnblogs.com/quyao/p/9645230.html
Copyright © 2011-2022 走看看