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异常。

Python文件(File)及读写操作及生成器yield的更多相关文章

  1. 使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  2. Python—对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.通过搜索得知,我们可以使用xlwt module将数据写入Excel表格,使用xlrd module从Excel读取数据.下面介绍如何实现使用 ...

  3. Python学习笔记015——文件file的常规操作之一(文本文件)

    1 什么是文件 文件是用于数据存储的单位 文件通常用来长期保存数据 读写文件是最常见的I/O操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件的功能都是由操作系统提供的,一般而言,操 ...

  4. Python学习笔记015——文件file的常规操作seek()及tell()

    1 seek() 1.1 概述 file.seek()用于将文件游标移动到文件的任意位置,便于对文件的当前位置(增.删.改.查)操作 1.2 语法 fileObject.seek(offset[, w ...

  5. python文件对象几种操作模式区别——文件操作方法详解

    文件对象的字节模式/b模式(以utf-8编码为例) 读操作 写操作 指针操作 ASCII字节 返回bytes/字节类型的Ascii 写入bytes类型字节 例如:b'This is ascii' 使用 ...

  6. python中文本的读写操作

    文本的操作 函数的排序操作: def func(i): return i[2] list=[('曹操',101,'c'),('吕布',100,'d'),('刘备',200,'l'),('大乔',50, ...

  7. Python学习笔记015——文件file的常规操作(二进制文件)

    有时候诸如图片.音乐等信息不是以文本的形式存储的,而是二进制文件格式存储的. 有时候很多信息不是以文本文件的形式存储的 很多时候,都需要用到二进制读取文件.毕竟很多信息不是以文本的形式存储.例如:图片 ...

  8. Python学习笔记015——文件file的常规操作之四(输入重定向)

    windows命令提示符(cmd.exe)和Linux Shell(bash等)均可通过">"或”>>“将输出重定向.其中, ">"表示 ...

  9. python 文件(file)操作

    操作文件的一般流程有: 打开文件.文件处理.关闭文件 开开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[不可读: 不存在则创建:存在 ...

随机推荐

  1. 2021年BI软件排名,国内外BI软件功能对比

    数据分析是帮助企业深入了解自身业务表现(例如正在做什么或哪块业务需要注意和改进)的重要元素.为了获得更直观的展现,数据分析BI软件可帮助公司通过报告.数据可视化.应用程序等从数据中获取决策数据支撑.没 ...

  2. python3中的缺省参数和global

    关于py中缺省参数: 在声明函数的时候对某些参数(一个或多个)进行赋值,在你调用的时候无需在实参列表中体现该参数,但是在执行的时候会默认加上这个已经在形参中定义好的参数. 但是,缺省参数必须放在最后, ...

  3. 大数据学习(24)—— Spark入门

    在学Spark之前,我们再回顾一下MapReduce的知识,这对我们理解Spark大有裨益. 在大数据的技术分层中,Spark和MapReduce同为计算层的批处理技术,但是Spark比MapRedu ...

  4. csredis-in-asp.net core理论实战-哨兵模式-使用示例

    csredis 开源地址 https://github.com/2881099/csredis 续上篇 csredis-in-asp.net core理论实战-主从配置.哨兵模式 示例源码 https ...

  5. linux signal信号(SIGHUP、SIGINT、SIGQUIT、SIGILL、SIGTRAP、SIGABRT...........................)

    SIGHUP /* hangup */       ~~~~~~      SIGHUP,hong up ,挂断.本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知 ...

  6. 寄生线虫免疫学研究新路径!华中农业大学胡敏团队报道寄生线虫N-糖基化修饰图谱

    N-糖基化修饰是真核生物中一种重要的蛋白质翻译后修饰,在许多生物学过程中起着关键作用,包括蛋白质折叠.受体-配体相互作用.免疫应答和疾病发病机制等.近年来,高精度质谱技术的出现促进了糖组和糖蛋白质组的 ...

  7. 【LeetCode】860. 柠檬水找零

    860. 柠檬水找零 知识点:贪心 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 ...

  8. netty系列之:文本聊天室

    目录 简介 聊天室的工作流程 文本处理器 初始化ChannelHandler 真正的消息处理逻辑 总结 简介 经过之前的系列文章,我们已经知道了netty的运行原理,还介绍了基本的netty服务搭建流 ...

  9. 『Java』String类使用方法

    Java中的字符串 java.lang.String类表示字符串类,Java程序中所有字符串文字都可以看作实现该类的实例. 特点: 字符串不可变:字符串的值在创建后不能在发生改变 public cla ...

  10. 浅谈C#取消令牌CancellationTokenSource

    前言 相信大家在使用C#进行开发的时候,特别是使用异步的场景,多多少少会接触到CancellationTokenSource.看名字就知道它和取消异步任务相关的,而且一看便知大名鼎鼎的Cancella ...