zoukankan      html  css  js  c++  java
  • Python文件(File)及读写操作及生成器yield

    open函数在内存中创建缓存区,将磁盘上的内容复制到此处。文件内容读入到文件对象缓冲区后,文件对象将缓冲区视为非常大的列表,其中每个元素都有一个索引。文件对象按字节(大约每个字符)来对文件对象缓冲区索引计数。许多文件方法隐式使用当前文件位置。例如,调用readline方法后,当前文件位置移动到下一个回车处。write方法在当前文件位置写入。

    Python方法用于当前位置文件:
    tell()方法:此方法用于当前文件位置和文件开始位置之间的相对位置,用字节进行计算
    seek()方法:此方法将当前文件位置设为文件对象缓冲区中的新位置,seek方法有两个参数,第一个参数是字节数目,第二个参数是引用点。当前文件指针从引用点开始,移动给出的字节数目
    典型用法:fd.seek(0),将当前文件位置重置为文件对象fd的开始位置。

    这里写图片描述

    当调用write(str)时,python解释器调用系统调用想把把内容写到磁盘,但是linux内核有文件缓存机制,经典影视所以缓存到内核的缓存区,当调用close()或flush()时才会真正的把内容写到文件

    或者写入数据量大于或者等于写缓存,写缓存也会同步到磁盘上

    关闭文件的目的

    1:写缓存同步到磁盘

    2:linux系统中每个进程打开文件的个数是有限的

    3:如果打开文件数到了系统限制,在打开文件就会失败

    这里写图片描述

    如上的代码不需要人为的进行close()语句的关闭,当脱离with这段代码时(即缩进与with相同),将会自动的进行close操作,如上代码可以等价看作:

    CSV是一种文件格式(特别是存储表格数据,例如excel),实际上是文本文件,可以使用文本文件函数和方法。

    Python提供了csv模块
    要处理CSV格式的文件,需要一些新的对象。csv.reader对象读取文件(使用reader构造函数创建reader对象,参数是文件对象),csv.writer对象写CSV文件,csv.writer对象通过使用方法writerow来将数据行写入。

    小技巧:由于raw_input返回值是字符串,因此可以直接用该字符串作为open命令的参数

    目前流行的操作系统将文件放于目录结构中。这个假定的特殊容器,在Linux和OS-X中称为目录,在Windows中称为文件夹,每个目录完成三件事情:

    • 目录中有文件列表
    • 目录中包含其他目录的列表
    • 目录中包含其父目录的链接

    操作系统从根目录(“/”)开始查找文件,沿着树结构的边向下移动。不同操作系统中路径的表示方式略有不同,Linux和MAC OS是“/”表示风格,Windows使用反斜杠()表示。

    os.getcwd函数,getcwd函数是指获取当前目录
    os.chdir函数,更改目录,将当前工作目录改变为参数所给出的路径
    os.listdir函数,列出路径参数所指定节点中所有文件和目录。函数返回的值可以命名
    os.walk函数,遍历路径,其中os.walk(“.”)表示从当前目录开始遍历
    还有split函数,split ext函数和join函数将在如下例子中举例。
    需求如下:
    在每个目录中,检查该目录下的每个文件是否为文本文件(扩展为“.txt”)。如果是文本文件,邮件格式则打开它,读取内容,然后查看特定字符串是否在文件中。如果找到特定字符串,则将文件添加到文件列表,将目录添加到目录列表。完成文件搜索后输出找到的内容。

    (注:在多线程的时候可以用yield创建线程池)
    生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束。
    生成器表达式: 通列表解析语法,只不过把列表解析的[]换成()
    生成器表达式能做的事情列表解析基本都能处理,只不过在需要处理的序列比较大时,列表解析比较费内存。

    生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器函数。yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator。

    yield 与 return:

    在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration(可以使用next方法来避免阻塞的产生);

    如果遇到return,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。

    close()

    手动关闭生成器函数,后面的调用会直接返回StopIteration异常。

  • 相关阅读:
    1.认识移动端 、前端工作流程 2019-2-13
    去掉标签默认样式属性 + visibility
    grid 布局:一般用于多行排版、单页排版、......(响应式布局)
    解决 display 和 transition 冲突的问题
    回到顶部效果
    文字溢出 生成 省略号
    【Python】协程实现生产者消费者模型
    【Python】0/1背包、动态规划
    【Python】使用super初始化超类
    【Python】考虑用生成器改写直接返回列表的函数
  • 原文地址:https://www.cnblogs.com/zhangyanran/p/10082016.html
Copyright © 2011-2022 走看看