• python文件处理


    文件是我们储存信息的地方,我们经常要对文件进行读、写、删除等的操作,在Python中,我们可用Python提供的函数和方法方便地操作文件。

    9.1. 文件处理的函数和方法

    使用Open()函数可打开文件,语法格式如下:

    file_handler = open(filename,[,mode[,bufsize]]
    

    filename是你要操作的文件名,如果不在当前路径,需指出具体路径。mode是打开文件的模式,表示你要如何操作文件,bufsize表示是否使用缓存。

    Table 9.1. mode

    模式

    描述

    r

    以读方式打开文件,可读取文件信息。

    w

    以写方式打开文件,可向文件写入信息。

    a

    以追加方式打开文件,文件指针自动移到文件尾。

    r+

    以读写方式打开文件,可对文件进行读和写操作。

    w+

    消除文件内容,然后以读写方式打开文件。

    a+

    以读写方式打开文件,并把文件指针移到文件尾。

    b

    以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

    Table 9.2. bufsize

    bufsize取值

    描述

    0

    禁用缓冲

    1

    行缓冲

    >1

    指定缓冲区的大小

    <1

    系统默认的缓冲区大小

    open()函数返回一个文件对象,我们可通过read()或write()函数对文件进行读写操作,下面是一些文件对象方法:

    Table 9.3. 文件对象方法

    方法

    描述

    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位置。offset为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。

    f.tell()

    获得文件指针位置。

    f.truncate([size])

    截取文件,使文件的大小为size。

    f.write(string)

    把string字符串写入文件。

    f.writelines(list)

    把list中的字符串一行一行地写入文件。

    9.2. 示例

    ·         文件的打开或创建

    · #!/usr/bin/env python
    
    · #-*- encoding:UTF-8 -*-
    
    ·  
    
    · filehandler = open('test.txt','w')               #以写模式打开文件,如果文件不存在则创建
    
    · filehandler.write('this is a file open/create test.
    the second line.')
    
    ·  
    
    · filehandler.close()
    
    · #!/usr/bin/env python
    
    · #-*- encoding:UTF-8 -*-·  
    
    · filehandler = open('test.txt','a')      #以追加模式打开文件,如果文件不存在则创建·  
    
    · filehandler.write('
    append the text in another line.
    ')·  
    
    · filehandler.close()
    

    ·         读取文件

    · #!/usr/bin/env python
    
    · #-*- encoding:UTF-8 -*-
    
    ·  
    
    · filehandler = open('test.txt','r')    #以读方式打开文件,rb为二进制方式(如图片或可执行文件等)
    
    ·  
    
    · print 'read() function:'              #读取整个文件
    
    · print filehandler.read()
    
    ·  
    
    · print 'readline() function:'          #返回文件头,读取一行
    
    · filehandler.seek(0)
    
    · print filehandler.readline()
    
    ·  
    
    · print 'readlines() function:'         #返回文件头,返回所有行的列表
    
    · filehandler.seek(0)
    
    · print filehandler.readlines()
    
    ·  
    
    · print 'list all lines'                #返回文件头,显示所有行
    
    · filehandler.seek(0)
    
    · textlist = filehandler.readlines()
    
    · for line in textlist:
    
    ·       print line
    
    ·  
    
    · print 'seek() function'               #移位到第32个字符,从33个字符开始显示余下内容
    
    · filehandler.seek(32)
    
    · print filehandler.read()
    
    ·  
    
    · print 'tell() function'               #移位到文件头,从头开始显示2位字符
    
    · filehandler.seek(0)
    
    · print filehandler.readline()          #显示第一行内容
    
    · print filehandler.tell()              #显示当前位置
    
    · print filehandler.readline()          #显示第二行内容
    
    · print filehandler.read()              #显示余下所有内容
    
    ·  
    
    · filehandler.close()                   #关闭文件句柄
    

    ·         文件系统操作

    · #!/usr/bin/env python
    
    · #-*- encoding:utf-8 -*-
    
    ·  
    
    · import os,fnmatch,glob
    
    ·  
    
    · for fileName in os.listdir ( '/root' ):                 #列出/root目录内容,不包括.和..
    
    ·    print fileName 
    
    ·  
    
    · os.mkdir('py')                  #在当前目录下创建一个py目录,且只能创建一层
    
    · os.rmdir( 'py')                 #在当前目录下删除py目录,且只能删除一层
    
    · os.makedirs('py/aa')            #可创建多层目录
    
    · os.removedirs('py/aa')          #可删除多层目录
    
    ·  
    
    ·  
    
    · print 'demonstration fnmatch module'                 
    
    · for fileName in os.listdir ( '/root/python/file' ):
    
    ·         if fnmatch.fnmatch(fileName,'*.txt'):        #利用UNIX风格的通配,只显示后缀为txt的文件
    
    ·                 print fileName
    
    ·  
    
    · print 'demonstration glob module'
    
    · for fileName in glob.glob ( '*.txt' ):               #利用UNIX风格的通配,只显示后缀为txt的文件
    
    ·         print fileName 
    

    ·         获取文件状态

    · #!/usr/bin/env python
    
    · #-*- encoding:UTF-8 -*-
    
    ·  
    
    · import os,time,stat
    
    ·  
    
    · fileStats = os.stat ( 'test.txt' )                         #获取文件/目录的状态
    
    · fileInfo = {
    
    · 'Size':fileStats [ stat.ST_SIZE ],                         #获取文件大小
    
    · 'LastModified':time.ctime( fileStats [ stat.ST_MTIME ] ),  #获取文件最后修改时间
    
    · 'LastAccessed':time.ctime( fileStats [ stat.ST_ATIME ] ),  #获取文件最后访问时间
    
    · 'CreationTime':time.ctime( fileStats [ stat.ST_CTIME ] ),  #获取文件创建时间
    
    · 'Mode':fileStats [ stat.ST_MODE ]                          #获取文件的模式
    
    · }
    
    · #print fileInfo
    
    ·  
    
    · for field in fileInfo:                                     #显示对象内容
    
    ·         print '%s:%s' % (field,fileInfo[field])
    
    ·  
    
    · #for infoField,infoValue in fileInfo:
    
    · #       print '%s:%s' % (infoField,infoValue)
    
    · if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):             #判断是否路径
    
    ·         print 'Directory. '
    
    · else:
    
    ·         print 'Non-directory.'
    
    ·  
    
    · if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ):             #判断是否一般文件
    
    ·    print 'Regular file.'
    
    · elif stat.S_ISLNK ( fileStats [ stat.ST_MODe ] ):           #判断是否链接文件
    
    ·    print 'Shortcut.'
    
    · elif stat.S_ISSOCK ( fileStats [ stat.ST_MODe ] ):          #判断是否套接字文件     
    
    ·    print 'Socket.'
    
    · elif stat.S_ISFIFO ( fileStats [ stat.ST_MODe ] ):          #判断是否命名管道
    
    ·    print 'Named pipe.'
    
    · elif stat.S_ISBLK ( fileStats [ stat.ST_MODe ] ):           #判断是否块设备
    
    ·    print 'Block special device.'
    
    · elif stat.S_ISCHR ( fileStats [ stat.ST_MODe ] ):           #判断是否字符设置
    
    ·    print 'Character special device.'
    
    · #!/usr/bin/env python
    
    · #-*- encoding:UTF-8 -*-
    
    ·  
    
    · import os.path
    
    ·  
    
    · fileStats = 'test.txt'
    
    ·  
    
    · if os.path.isdir ( fileStats ):         #判断是否路径
    
    ·         print 'Directory.'
    
    · elif os.path.isfile ( fileStats ):      #判断是否一般文件
    
    ·         print 'File.'
    
    · elif os.path.islink ( fileStats ):      #判断是否链接文件
    
    ·         print 'Shortcut.'
    
    · elif os.path.ismount ( fileStats ):     #判断是否挂接点
    
    ·         print 'Mount point.'
    

    stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义。我们可方便地根据stat模块存取os.stat()中的值。

    ·         串行化文件

    · #!/usr/bin/env python
    
    · #-*- encoding:UTF-8 -*-
    
    ·  
    
    · import pickle
    
    ·  
    
    · filehandler = open('pickle.txt','w')
    
    ·  
    
    · text = ['this is a pickle demonstrate','aa','bb']
    
    ·  
    
    · pickle.dump(text,filehandler)           #把text的内容序列化后保存到pickle.txt文件中
    
    ·  
    
    · filehandler.close()
    
    ·  
    
    · filehandler2 = open('pickle.txt')
    
    ·  
    
    · textlist = pickle.load(filehandler2)    #还原序列化字符串
    
    · print textlist
    
    ·  
    
    · filehandler2.close()
    
    ·  
    
    · #cpickle是用C写的pickle模块,比标准的pickle速度快很多,使用方法同pickle。
    

    ·         内存文件

    · #!/usr/bin/env python
    
    · #-*- coding: utf-8 -*-·  
    
    · import StringIO·  
    
    · fileHandle = StringIO.StringIO ( "Let freedom ring." )   #create file in memory·  
    
    · print fileHandle.read() # "Let freedom ring."·  
    
    · fileHandle.close()·  
    
    · #cStringIO是用C写的StringIO模块,执行速度比StringIO快。
    

    shutil模块是一个高级的文件处理模块,可实现文件的拷贝、删除等操作。

  • 相关阅读:
    音乐分类/生成杂记
    音视频编码笔记
    《The challenge of realistic music generation: modelling raw audio at scale》论文阅读笔记
    使用基于Caffe的MobileNet分类踩坑备忘录
    四大轻量化模型对比(转)
    WaveNet: 原始音频生成模型
    《SONG FROM PI: A MUSICALLY PLAUSIBLE NETWORK FOR POP MUSIC GENERATION》论文笔记
    上采样 及 Sub-pixel Convolution (子像素卷积)
    python之sys._getframe() 用于查看函数被什么函数调用以及被第几行调用及被调用函数所在文件
    11
  • 原文地址:https://www.cnblogs.com/jacker1979/p/4447874.html
Copyright © 2020-2023  润新知