zoukankan      html  css  js  c++  java
  • python文件操作

    1. 文件的基本操作

    1.1 文件的打开或创建

    文件的打开或创建可以使用内置函数file(别名open)。函数声明如下:
    file(name[,mode[,buffering]]) -> file object

    open(name[,mode[,buffering]]) -> file object

    其中,name表示被打开的文件名称;mode表示文件的打开模式;buffering设置缓存模式,0表示不缓存,1

    表示行缓存,如果大于1表示缓冲区的大小,以字节为单位。函数返回一个file对象

    文件的打开模式(mode)如下:
    'r'    只读方式打开(缺省,如果文件不存在,则抛出异常)
    'r+'   读写方式打开(如果文件不存在,则抛出异常)
    'w'    写入方式打开(覆盖重写全部内容,如果文件不存在,则自动创建文件)
    'w+'   读写方式打开(覆盖重写全部内容,如果文件不存在,则自动创建文件)
    'a'    写入方式打开(在文件末尾追加内容,如果文件不存在,则自动创建文件)
    'a+'   读写方式打开(在文件末尾追加内容,如果文件不存在,则自动创建文件)
    'b'    二进制模式打开。可与r、w、a、+结合使用。如:'rb','wb','ab','rb '
    'U'    支持所有的换行符合。“ ”“ ”“ ”都表示换行。
    注意:对于图片、视频等文件必须使用“b”模式读写。

    file对象的常用属性和方法:

    属性:
    Closed
    判断文件是否关闭,如果文件被关闭返回True

    Encoding
    显示文件的编码类型

    Mode
    显示文件的打开模式

    Name
    显示文件的名称

    Newlines
    文件使用的换行模式

    方法:
    flush()
    把缓存区的内容写入磁盘

    close()
    关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成手动关闭的

    习惯。如果在文件关闭后对其进行操作会抛出ValueError异常

    read([size])
    从文件中读取全部内容作为字符串返回。如果指定size,则从文件中读取size长度作为字符串返回,size

    以byte为单位

    readline([size])
    从文件中读取一行作为字符串返回。如果指定size,则返回读取行的一部分

    readlines([size])
    从文件中读取每一行作为一个list返回。如果提供size参数,表示每次读取的字节数

    seek(offset[,whence])
    将文件指针移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供

    了whence参数就不一定了,whence为0表示从头开始计算,1表示以当前位置开始计算,2表示以文件末尾进

    行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末

    尾。

    tell()
    返回文件指针当前位置,以文件的开头为原点

    next()
    返回下一行的内容,并将文件指针移到下一行。for line in file这样的语句,就是调用next()函数来实

    现遍历的。

    truncate([size])
    删除size个字节的内容。

    write(str)
    把str写到文件中,write()并不会在str后加上一个换行符

    writelines(seq)
    把字符串序列seq的内容全部写到文件中(多行一次性写入)。这个函数也不会在str后加上一个换行符


    1.2. 文件的读取

    1.2.1 按行读取方式readline()

    readline()每次读取文件中的一行。需要使用永真表达式循环读取文件。当文件指针移到到文件末尾,依

    然使用readline()读取文件将出现错误。因此程序中需求添加一个判断语句,判断文件指针是否移到到文

    件末尾,并且通过语句中断循环。
    例如:
    FILE=open('example.txt')
    while True:
        line=FILE.readline()
        if line:
            print(line)
        else:
            break
    FILE.close()

    1.2.2 多行读取方式readlines()

    使用readlines()读取文件,需要通过循环访问readlines()返回列表[line1,line2,...lineN]里的元素。

    readlines()一次可读多行数据,为避免将文件所有内容加载到内存中,常使用这种方法以提供效率。
    例如:
    FILE=open('example.txt')
    lines=FILE.readlines()
    for line in lines:
        print(line)
    FILE.close()

    1.2.2 一次性读取方式read()

    read()将从文件中读取所有内容,并赋值给一个字符串变量。
    例如:
    FILE=open('example.txt')
    context=FILE.read()
    print(context)
    FILE.close()

    注意:file对象内部将记录文件指针的位置,以便下次操作。只要file对象没有执行close()方法,文件指

    针就不会释放。

    1.3 文件的写入

    单行写入方式write()
    write(string)
    将一个字符串写入文件,再close()关闭文件。

    多行写入方式writelines()
    writelines([string1,string2,…])
    一次写入多行,将列表中的元素一次写入文件

    注意:write()和writelines()写入前都会清楚文件中的原有内容,在重新写入新的内容,相当于“覆盖”

    的方式。如果需要保留文件中的原有内容,可以使用“a+”模式打开文件。
    用writelines()写文件的速度更快。如果写入文件的字符串比较多,可以使用writelines()以提高效率。

    1.4 文件的删除

    文件的删除要用到os模块和os.path模块。os模块提供了对系统环境、文件、目录等操作系统级的接口函数

    。os模块常用的文件处理函数:
    chdir(dirname)
    把当前工作目录切换到dirname下

    getcwd()
    返回当前的工作目录路径

    mkdir(path,[mode])
    创建目录。mode的意义参见os.chmod(),默认是0777

    makedirs(path,[mode])
    和os.mkdir()类似,不过会先创建不存在的父目录。

    readlink(path)
    返回path这个符号链接所指向的路径

    remove(path)
    删除文件,不能用于删除目录

    rmdir(path)
    删除文件夹,不能用于删除文件

    shutil.rmtree(path[,ignore_errors[,onerror]])
    删除文件夹

    rename(old,new)
    重命名文件

    stat(path)
    返回path指定文件所有属性

    fstat(path)
    返回打开文件所有属性

    statfile(filepath[,opration])
    启动关联程序打开文件

    tmpfile()
    创建并打开('w+b')一个新的临时文件

    walk()
    生成一个目录树下的所有文件名

    os.path模块用于处理文件和目录的路径。os.path模块常用的文件处理函数:

    abspath(path)
    把path转成绝对路径

    dirname(p)
    返回目录的路径

    exists(path)
    判断文件或者目录是否存在

    getatime(path)
    返回path所指向的文件或者目录的最后访问时间。

    getmtime(path)
    返回path所指向的文件或者目录的最后修改时间

    getctime(path)
    返回path所指向的文件的创建时间

    getsize(path)
    返回path所指向的文件的大小

    isabs(s)
    判断路径是否为绝对地址

    isfile(path)
    判断path所指向的是否是一个普通文件,而不是目录

    isdir(path)
    判断path所指向的是否是一个目录,而不是普通文件

    split(path) -> (dirname,basename)
    这个函数会把一个路径分离为两部分,比如:os.path.split(”/foo/bar.dat”)会返回

    (”/foo”,”bar.dat”)

    splitext(path)
    把path分离成基本名和扩展名。比如:os.path.splitext(”/foo/bar.tar.bz2″)返回(’/foo/bar.tar’

    , ‘.bz2′)。要注意它和os.path.split()的区别

    splitdrive(path)
    把path分离成基本名和驱动器。

    walk(top,func,arg)
    遍历目录数,与os.walk()功能相同

    join(dirname,basename)
    这个函数会把目录名和文件名组合成一个完整的路径名,比如:os.path.join(”/foo”,”bar.dat”)会

    返回”/foo/bar.dat”。这个函数和os.path.split()刚好相反。

    expanduser(path)
    把path中包含的”~”和”~user”转换成用户目录

    expandvars(path)
    根据环境变量的值替换path中包含的”$name”和”${name}”,比如环境变量FISH=nothing,那

    os.path.expandvars(”$FISH/abc”)会返回”nothing/abc”

    normpath(path)
    去掉path中包含的”.”和”..”

    islink(path)
    判断path所指向的是否是一个符号链接

    ismount(path)
    判断path所指向的是否是一个挂接点(mount point)

    1.5 文件的复制和移动

    复制文件可以使用shutil模块的copyfile()函数:
    copyfile(src,dst)
    其中,src表示源文件路径,dst表示目标文件路径

    移动文件可以使用shutil模块的move()函数:
    move(src,dst)
    其中,src表示源文件路径,dst表示目标文件路径

    1.6 文件的重命名

    文件的重命名需要用到os.rename()

    #修改文件名
    import os
    list=os.listdir('.')
    if 'example.txt' in list:
        os.rename('example.txt','somename.txt')

    1.7 文件内容的查找和替换

    1.7.1 文件内容的查找

    文件内容的查找需要使用re模块
    re.findall('some pattern',str)

    1.7.2 文件内容的替换

    string.replace('strold','strnew')[.replace('strold','strnew')[…]]


    1.8 配置文件的访问

    配置文件ini由多个块组成,每个块由多个配置项组成。python有configparser模块用于解析配置文件

    1.8.1 创建及更新配置文件

    import configparser

    def SaveSetting(self,section,key,values):

        config = configparser.ConfigParser()
        try:
            INI = open('Setting.ini', 'r+')
            config.read('Setting.ini')
            config[str(section)][str(key)]=str(values)
            config.write(INI)
            INI.close()
        except IOError:
            INI = open('Setting.ini', 'w')
            config[str(section)]={}
            config[str(section)][str(key)]=str(values)
            config.write(INI)
            INI.close()
        except KeyError:
            INI = open('Setting.ini', 'r+')
            config[str(section)]={}
            config[str(section)][str(key)]=str(values)
            config.write(INI)
            INI.close()
        del config

    1.8.1 读取配置文件

    import configparser

    def GetSetting(self,section,key):

        config = configparser.ConfigParser()
        try:
            config.read('Setting.ini')
            values = config[str(section)][str(key)]
        except KeyError:
            values = None

        return values

    2. 目录的基本操作

    2.1 目录的创建和删除

    os模块提供了针对目录进行操作的函数。常见目录处理函数:
    mkdir(path[,mode=0777])
    创建path指定的一个目录

    makedirs(name,mode=511)
    创建多级目录,name表示“path1/path2/…”

    rmdir(path)
    删除path指定的目录

    removedirs(path)
    删除path指定的多级目录

    listdir(path)
    返回path指定目录下所有的文件名

    getcwd()
    返回当前的工作目录

    chdir(path)
    将当前目录改为path指定目录

    walk(top,topdown=True,onerror=None)
    遍历目录树

    2.2 目录的遍历

    2.2.1 递归函数

    import os
    def VisitDir(path):
        list=os.listdir(path)
        for p in list:
            pathname=os.path.join(path,p)
            if not os.path.isfile(pathname):
                VisitDir(pathname)
            else:
                print(pathname)

    2.2.2 os.path.walk()

    os.path.walk()函数声明如下:
    walk(top,func,arg)
    其中,top表示需要遍历的目录树的路径;func表示回调函数;arg是传输给回调函数的func的元组。例如:
    import os,os.path
    def VisitDir(arg,dirname,names):
        for filename in names:
            print(os.path,join(dirname,filepath))
    path='D:path'
    os.path.walk(path,VisitDir,())

    2.2.3 os.walk()

    os.walk()可用于目录的遍历。os.walk()比os.path.walk()效率高,而且不需要回调函数,更容易使用。os.path()声明如下:
    walk(top,topdown=True,onerror=None)
    其中,top表示需要遍历的目录树的路径;topdown默认值为True,表示首先返回目录树下的文件,然后再遍历目录树下的子目录,False表示顺序相反;onerror默认值为None,表示忽略目录遍历产生的错误。该函数返回一个元组,包含每次遍历的路径名、目录列表和文件列表三个元素。例如:
    import os
    def VisitDir(path):
        for root,dirs,files in os.walk(path):
            for filepath in files:
                print(os.path,join(root,filepath))
    path='D:path'
    os.path.walk(path)

  • 相关阅读:
    Vue 使用Scss,深度修改局部样式
    Sublime Text 插件:批量删除空白行
    Sublime Text 3前端开发常用优秀插件介绍
    常用的sublime text 3插件(很爽哦)
    20 个强大的 Sublime Text 插件
    Java多线程之synchronized详解
    进阶Java多线程
    初识Java多线程
    分布式锁实现的正确打开方式
    分布式session实现方式
  • 原文地址:https://www.cnblogs.com/doudongchun/p/3699026.html
Copyright © 2011-2022 走看看