• python进阶之路之文件处理


    Python之文件处理

    1.文件的常见操作

    文件是日常编程中常用的操作,通常用于存储数据或应用系统的参数。python提供了os、os.path、shutil等模块处理文件,其中包括最常用的打开文件,读写文件,赋值文件和删除文件等函数。

    1.1文件的创建

    python3.+中移除了python2中的全局file()函数,还保留了open()函数。文件的打开或创建可以使用函数open()。该函数可以指定处理模式,设置打开的文件为只读,只写,可读写状态。open()的声明如下:

    open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
    

    参数说明:

    • 参数file是被打开的文件名称,如果文件file不存在,open()将创建名为name的文件,然后再打开该文件。
    • 参数mode是指文件的打开模式。文件的打开模式请参照以下内容。
    • 参数buffering是设置缓存模式。0表示不缓存,1表示缓存;如果大于1则表示缓冲区的大小,以字节为单位。
    • 参数encoding是设置文件的字符编码格式。
    • open()函数会返回一个file对象,file 对象可以对文件进行各种操作 文件模式:

      'r' open for reading (default)

      'w' open for writing, truncating the file first

      'x' create a new file and open it for writing

      创建一个新的文件,打开并写入

      'a' open for writing, appending to the end of the file if it exists

      模式打开文件以追加

      'b' binary mode二进制模式打开,可与其他模式一起使用

      't' text mode (default)

      '+' open a disk file for updating (reading and writing)

      'U' universal newline mode (deprecated)支持所有的换行符号

    注意:图片、视频等文件必须使用b的模式进行读写。

    message = '''
    hello world,
    
    hello python,
    
    good time.
    '''
    f = open('test.txt','w')
    f.write(message)
    f.close()
    

    代码说明:

    • 定义一个字符串变量
    • 以只写模式创建一个文件并写入
    • 将字符串变量写入文件
    • 关闭文件

    1.2 文件的读取

    文件的读取有多种方法,可以使用readline()、readlines()、或read()函数读取文件。

    1. 按行读取方式readline()

    readline()每次读取文件的一行,需要循环读取文件。但是当文件指针移动到文件的末尾是,依然使用readline()读取文件将出现错误。因此程序中需要添加一个判断语句,判断时间指针是否在文件的尾部,并且通过该语句中断循环。示例如下:

    # 使用readline模式读取文件
    f = open('test.txt','r')
    while True:
        line = f.readline()
        if line:
            print(line)
        else:
            break
    f.close()
    #如果line = f.readline(2)则表示每次循环只读取两字节的内容,直到行的末尾
    

    2.多行读取方式readlines()

    # 多行读取文件
    f = open('test.txt')
    lines = f.readlines()
    for line in lines:
        print(line)
    f.close()
    

    3.一次性读取方式read()

    读取文件最简单的方式就是使用read(),read()将文件中一次性读出所有内容,并赋值给字符串变量,但是当文件比较大的时候不建议使用read()的方式去读取文件,因为一次读取比较大的内容会消耗大量的内存,影响系统的性能。示例如下:

    # 一次读取文件
    f = open('test.txt','r')
    lines = f.read()
    print(lines)
    f.close()
    

    文件指针:

    with open('test.txt','rb') as src:
        rd = src.read(100)
        print(rd)
        print(src.seek(src.tell()))
        rd = src.read(100)
        print(rd)
        print(src.seek(src.tell()))
    #每次读取100字节,然后返回指针的位置
    

    4.with函数

    通常我们使用open()打开一个文件并赋值给一个字符串变量来对文件进行操作,最后还需要进行手动关闭文件,这样写起来有点麻烦,下面我们可以使用with函数将文件打开与关闭写在一行函数上。

    with open('test.txt','r') as src:
        da = src.read()
        print(da)
    #只读模式打开文件并赋值给src,然后对文件进行操作即可,代码与使用open()来操作文件相同。
    

    1.3文件的写入

    文件的写入有多种方法,可以使用write(),也可以使用writelines()方法写入文件。write()可以将字符串写入文件,writelines()可以将列表写入文件。示例如下:

    m1 = 'hello world'
    l1 = ['good','time']
    f = open('test1.txt','w')
    f.write(m1)
    f.writelines(l1)
    f.close()
    

    文件的追加:

    m1 = 'hello python'
    f = open('test1.txt','a+')
    f.write(m1)
    f.close()
    

    1.4文件的删除

    文件的删除需要使用os模块和os.path模块,os模块提供了系统的环境、文件、目录等操作系统的函数。 对于文件来说比较常用的os模块的函数如下:

    • os.access(path,mode)#按照mode指定的权限进行访问
    • os.chmod(path,mode)#改变文件的访问权限,mode用UNIX的权限符号表示
    • os.open(filename,flag[,mode=0777])#按照mode指定的权限打开文件。默认情况下,给所有用户读、写、执行的权限
    • os.remove(path)#删除path指定的文件
    • os.rename(old,new)#重命名文件或目录,old表示原文件或目录,new表示新文件或目录
    • os.stat(path)#返回path指定文件的所有属性
    • os.fstat(path)#返回打开文件的所有属性
    • os.startfile(filepath[,operation])#启动关联程序打开文件。例如,打开一个html文件,将启动IE浏览器
    • os.tmpfile()#创建一个临时文件,文件创建在操作系统的临时目录中

    注意:os模块的open()函数与内建的open()函数的用法不同。

    os.path模块常用的函数如下:

    • os.path.abspath(path)#返回path所在的绝对路径
    • os.path.dirpath(path)#返回目录的路径
    • os.path.exists(path)#判断文件是否存在
    • os.path.getatime(filename)#返回文件的最后访问时间
    • os.path.getctime(filename)#返回文件的创建时间
    • os.path.getmtime(filename)#返回文件最后的修改时间
    • os.path.getsize(filename)#返回文件的大小

    os.path判断函数

    • os.path.isabs(s)#测试路径是否是绝对路径
    • os.path.isdir(path)#判断path指定的是否是目录
    • os.path.isfile(path)#判断path指定的是否是文件
    • os.path.split(p)#对路径进行分割,并以列表的方式返回
    • os.path.splitext(p)#从路径中分割文件的扩展名
    • os.path.splitdrive(p)#从路径中分割驱动器的名称
    • os.walk(top,func,arg)#遍历目录树

    示例如下:

    import os
    if os.path.exists('../test.txt'):
        os.remove('test.txt')
        print('is del')
    else:
        print('no')
    

    1.5文件的复制

    文件的复制有多种方法,下面我们来看一下第一种比较low的方式,就是读写的方式进行文件复制。示例如下:

    #使用read()、write()实现文件复制
    f1 = open('1.txt','r')
    f2 = open('2.txt','w')
    f2.write(f1.read())
    f2.close()
    f1.close()
    

    第二种方法:

    shutil模块,shutil模块是另外一个文件、目录的管理接口,提供了一些用于复制、目录的函数。copyfile()函数可以实现文件的复制,copyfile()函数的声明如下:

    shuil.copyfile(src,dst)
    
    • src表示源文件的路径,src是字符串类型
    • dst表示目标文件的路径,dst是字符串类型
    • src指向的文件复制到dst指向的文件

    示例如下:

    import shutil
    shutil.move('1.txt','2.txt')
    

    1.6文件的重命名

    os模块的函数rename()可以对文件或目录进行重命名。

    import os
    os.rename('1.txt','11.txt')
    

    使用shutil中的move()函数也可以实现文件重命名的目的。

    import shutil
    shutil.move('11.txt','1.txt')
    

    修改文件的后缀名:

    import os
    files = os.listdir('.')
    for filename in files:
    li = os.path.splitext(filename)#返回后文件名和后缀名的列表
    if li[1] == '.html':
        newname = li[0] + '.htm'
        os.rename(filename,newname)
    

    glob模块用于对路径的匹配,返回符合给定条件的文件列表。glob模块的主要函数就是glob(),该函数返回符合同一匹配条件的多个文件。上面的呈现需要判断是否为html后缀,也可以使用glob()函数直接匹配文件名称。 匹配代码如下:

    glob.glob('*.html')
    

    glob还可以对路径做更对的匹配。例如,匹配C盘中以w开头的目录中所有的文本文件。

    glob.glob('C:\w*\*\txt') 
    

    1.7文件的搜索和替换

    文件内容的搜索和替换可以使用字符串的查找和替换来实现。例如,在htllo.txt文件中查找字符串'hello',并统计'hello'出现的次数。代码如下:

  • 相关阅读:
    atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像清晰度 模糊度 检测 识别 评价算法 原理
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    atitit。企业的价值观 员工第一 vs 客户第一.docx
    Atitit 实现java的linq 以及与stream api的比较
    Atitit dsl exer v3 qb3 新特性
    Atititi tesseract使用总结
    Atitit 修改密码的功能流程设计 attilax总结
    atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx
  • 原文地址:https://www.cnblogs.com/lixingli/p/5226533.html
Copyright © 2020-2023  润新知