• 文件与文件系统


    第11章  文件与文件系统
    open()函数:
    形式:
    open(file,mode='r',buffering=-1,encoding=None,errors=None,....)
    返回一个文件对象file

    mode取值:
    r        只读
    w        可写,会清除文件内容
    a        附加数据
    b        二进制数据模式
    x        新建一个文件,可写
    +        打开文件直接更新
    t        文本模式(默认)

    ‘rb’ 只读模式打开二进制文件
    ‘wt’ 可选模式打开文本文件
    bufsize 为0时表示打开文件不用缓冲,为1时表示进行缓冲,负值则使用系统默认值,任何其他值则表示使用缓冲的字节数

    常用文件操作:
    file.read([n])    将整个文件读入字符串中,或指定n字节
    file.readline([n])    读入文件的一行到字符串中
    file.readlines()       将整个文件按行读入到列表中
    file.write(s)          向文件中写入字符串
    file.writelines(lines)   向文件中写入一行数据列表
    file.close()       关闭打开的文件


    Python处理文件中的数据,可以使用while语句来循环读取文件中的行:
    while True:
        line=f.readline()
        if not line:
            break
    也可以用for语句来迭代文件中的所有行:
    for line in f:
        pass

    例:
    def file_hdl(name='python.txt'):
       f=open(name)
       res=0
       i=0
       for line in f:
           i+=1
           print('第%s行的数据为:'%line.strip(),line)
           res+=int(line)
        print('这些数的和为',res)
        f.close()
    if __name__=='__main__':
        file.hdl()

    也可以使用with来管理文件的打开和关闭
    改写上面的例子:
    def file_hdl(name='python.txt'):
        with open(name) as f:
            res=0
            i=0
            for line in f:
                i+=1
                print('第%s行的数据为:'%line.strip(),line)
                res+=int(line)
            print('这些数的和为',res)
     if __name__=='__main__':
        file.hdl()


    fileinput操作文件
    fileinput模块提供了一个以行模式循环处理一个或多个文件内容,它实现了对文件中行的懒惰迭代,读取时不需要把文件内容放入内存,提高程序效率
    fileinput模块常用函数:
    input(): 返回能够用于迭代一个或多个文件中所有行的对象
    filename(): 返回当前文件的名称
    lineno():返回当前读取行的数量
    isfirstline():返回当前行是否文件的第一行
    filelineno():返回当前读取行在文件中的行数

    例:
    import fileinput
    def demo_fileinput():
        lines=fileinput.input(['fpa.txt','fpb.txt'])
        for line in lines:
            print("总第%d行,"%fileinput.lineno(),
                  "文件中%s中第%d行:"%(fileinput.filename,fileinput.filelineno))
            print(line.strip())
    if __name__=='__main__':
        demo_fileinput()     



    常用文件和目录操作
    import os

    os.getcwd()    #获得当前路径(所运行程序的目录)
    os.listdir(path)   #以列表的形式返回path目录下的文件或目录的名称
    os.mkdir(path)   #创建目录
    os.rmdir(path)   #删除目录,删除的目录必须为空目录
    os.path.isdir(path)   #判断是否是目录
    os.path.isfile(path)    #判断是否是文件
    os.walk(path)  #返回一个可迭代的生成器
    for i in os.walk('test'):
       print(i)   #输出的格式为多个元组,每个元组的第一项为遍历的目录名(字符串),第二项为遍历目录中的子目录列表,第三项为遍历目录中所有文件的列表
    for a,b,c in os.walk('test'):
       print(c)   #c 也是可迭代的生成器

    由文件名批量获取姓名和考号
    import os
    filenames=[]
    for a,b,files in os.walk('test'):
        if files:
            filenames.append(file[:-4] for file in files)
    fname='testexam'
    i=o
    for files in filenames:
        f=open(fname+str(i)+'.xls','w')
        for name in files:
            f.write(name[-2:]+' '+name[:-2]+' ')
        f.close()
        i+=1
    print("成功生成!")

    批量文件重命名
    import os
    perfix='Python'
    length=2
    base=1
    format='mdb'

    def PadLeft(str,num,padstr):
        stringlength=len(str)
        n=num-stringlength
        if n>=0:
            str=padstr*n+str
        return str
    print('the file in test2 will be renamed')
    all_files=os.listdir('test2')
    print([f for f in all_files if os.path.isfile(test2/%s)%f])
    input=input('press y to continue ')
    if input.lower()!='y':
        exit()
    filenames=os.listdir('test2')
    i=base-1
    for filename in filenames:
        i=i+1
        if os.path.isfile('test2/%s'%filename):
            name=str(i)
            name=PadLeft(name,length,'0')
            t=filename.split('.')
            m=len(t)
            if format=='':
                os.rename('test2/%s'%filename,'test2/%s'%(perfix+name+'.'+t[m-1]))
            else:
                if t[m-1]==format:
                     os.rename('test2/%s'%filename,'test2/%s'%(perfix+name+'.'+t[m-1]))
                else:
                     i=i-1
         else:
             i=i-1
    all_files=os.listdir('test2')
    print([f for f in all_files if os.path.isfile(test2/%s)%f])

  • 相关阅读:
    菜鸟刷题路:剑指 Offer 09. 用两个栈实现队列
    python 全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)
    python 全栈开发,Day39(进程同步控制(锁,信号量,事件),进程间通信(队列,生产者消费者模型))
    python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)
    python 全栈开发,Day37(操作系统的发展史)
    python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)
    python 全栈开发,Day35(TCP协议 粘包现象 和解决方案)
    python 全栈开发,Day34(基于UDP协议的socket)
    python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
    python 全栈开发,Day32(知识回顾,网络编程基础)
  • 原文地址:https://www.cnblogs.com/MUMO/p/5780809.html
Copyright © 2020-2023  润新知