zoukankan      html  css  js  c++  java
  • 文件与文件系统

    第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])

  • 相关阅读:
    Java容器-引用分类与部分Map用法
    Java容器-引用数据类型排序+TreeSet、TreeMap底层实现
    JAVA容器-重点总结与深度解析
    JAVA容器-浅谈HashMap的实现原理
    JAVA容器-模拟LinkedList实现(双链表)
    JAVA容器-模拟ArrayList的底层实现
    在代码动态设置RelativeLayout的属性,比如layout_below
    java substring
    String StringBuffer StringBuilder
    线性布局通过适配器可以动态加载view
  • 原文地址:https://www.cnblogs.com/MUMO/p/5780809.html
Copyright © 2011-2022 走看看