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)

  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/doudongchun/p/3699026.html
Copyright © 2011-2022 走看看