zoukankan      html  css  js  c++  java
  • 18、文件与目录

    文件与目录

    目标

    • 文件的打开和创建
    • 文件读取
    • 文件写入
    • 内容查找和替换
    • 文件删除、复制、重命名
    • 目录操作

    案例

    • 目录分析器
    • 杀毒软件
    • 系统垃圾清理工具

    python文件读写

    • python进行文件读写的函数是openfile
    • file_handle = open(filename, mode)
    模式 说明
    r 只读
    r+ 读写
    w 写入,先删除原文件,在重新写入,如果文件没有则创建
    w+ 读写,先删除原文件,在重新写入,如果文件没有则创建(可以写入输出)
    a 写入,在文件末尾追加新的内容,文件不存在,创建之
    a+ 读写,在文件末尾追加新的内容,文件不存在,创建之
    b 打开二进制文件。可以与r、w、a、+结合使用
    U 支持所有的换行符号。" "、" "、" "

    文件对象方法

    • close

      • 格式
        • FileObject.close()
      • 说明
        • 关闭文件,关闭前,会将缓存中的数据先写入文件。
    • readline

      • 格式
        • String = FileObject.readline([size])
      • 说明
        • 每次读取文件的一行
        • size:是指每行每次读取size个字节,直到行的末尾
    • readlines

      • 格式
        • List = FileObject.readlines([size])
      • 说明
        • 多行读,返回一个列表
        • size: 每次读入size个字符,然后继续按size读,而不是每次读入行的size个字符
    • read

      • 格式
        • String = FileObject.read([size])
      • 说明
        • 读出文件的所有内容,并复制给一个字符串
        • size: 读出文件的前[size]个字符,并输出给字符串,此时文件的指针指向size处
    • next

      • 格式
        • FileObject.next()
      • 说明
        • 返回当前行,并将文件指针到下一行
    • write

      • 格式
        • FileObject.write(string)
      • 说明
        • write和后面的writelines在写入前会是否清除文件中原来所有的数据,在重新写入新的内容,取决于打开文件的模式
    • writelines

      • 格式
        • FileObject.writelines(List)
      • 说明
        • 多行写
        • 效率比write高,速度更快,少量写入可以使用write
    • seek

      • 格式
        • FileObject.seek(偏移量,选项)
      • 说明
        • 选项=0时,表示将文件指针指向从文件头部到“偏移量”字节处。
        • 选项=1时,表示将文件指针指向从文件的当前位置,向向移动“偏移量”字节。
        • 选项=2时,表示将文件指针指向从文件的尾部,向前移动“偏移量”字节。
    • flush

      • 格式
        • FileObject.flush()
      • 说明
        • 提交更新

    文件查找和替换

    • 文件查找

    • cat a.txt

        hello world
        hello hello world
      
    • 统计文件中hello的个数

        import re
      
        fp = file("a.txt", "r")
        count = 0
        for s in fp.readlines():
            li = re.findall("hello", s)
            if len(li) > 0:
                count = count + len(li)
      
        print "Search ",count," hello"
        fp.close()
      
    • 文件内容替换

    • 问题:把a.txt中的hello替换为good, 并保存结果到b.txt中

    • 示例代码一:

        fp1 = file("a.txt", "r")
        fp2 = file("b.txt", "w")
      
        for s in fp1.readlines():
            fp2.write(s.replace("hello", "good"))
      
        fp1.close()
        fp2.close()
      
    • 示例代码二:

        fp1 = file("a.txt", "r")
        fp2 = file("b.txt", "w")
        
        s = fp1.read()
        fp2.write(s.replace("hello", "good"))
      
        fp1.close()
        fp2.close()
      

    目录操作

    • 目录操作就是通过python来实现目录的创建,修改,遍历等功能

    • import os

      • 目录操作需要调用os模块
      • 比如os.mkdir('/root/demo')
    • 常用函数

    函数 说明
    mkdir(path[,mode=0777]) 创建单个目录
    makedirs(name,mode=511) 创建多层级目录
    rmdir(path) 删除单个目录
    removedirs(path) 删除多层级目录
    listdir(path) 列出目录
    getcwd() 取得当前目录
    chdir(path) 切换目录
    walk(top, topdown=True, onerror=None)
    • 案例

      • 系统垃圾清除小工具
    • 方式

      • 递归函数
      • os.walk()函数
        • 函数声明:os.walk(path)

        • 该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表。

            for path, dirlist, filelist in os.walk('.'):
                for filename in filelist:
                    print os.path.join(path, filename)
  • 相关阅读:
    【我读cachecloud】cachecloud-open-web模块controller
    【我读cachecloud】cachecloud项目概述
    [转]Kerberos协议
    【shell】我的wait为什么不能用
    【 一次性密码】TOTP
    【shell】再看一眼find--find使用中遇到的问题分析
    我知道点redis-单机数据库(RDB持久化)
    我知道点redis-数据结构与对象(对象)-对象实现
    我知道点redis-数据结构与对象(对象)-对象存储
    我知道点redis-数据结构与对象(链表)
  • 原文地址:https://www.cnblogs.com/zfc2201/p/8168998.html
Copyright © 2011-2022 走看看