ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python文件输入处理神器:轻松遍历文件与标准输入

Python文件输入处理神器:轻松遍历文件与标准输入 源代码: Lib/.py这个模块实现了一个辅助类和一些函数, 这些辅助类和函数是用来帮助你快速编写那种能够访问标准输入或者文件列表的循环的。如果你只是想要进行读取一个文件或者是写入一个文件的操作的话, 请参阅相关说明。典型用法为:import fileinpufor line in fileinput.input():process(line)这个程序会去对sys.argv里面列出的那些文件里的每一行内容进行循环处理。如果列表是空的, 那就使用sys.stdin来代替。要是发现有一个文件的名字刚好等于横杠, 就会把它换成用sys.stdin的方式来处理一下, 这时候相关的可选参数mode和一些其他的东西都会被忽略掉。如果想规定另外的文件顺序的话, 就把那个需要作为第一参数的内容传给它就行。当然, 只给一个单独的文件也是允许的。默认情况下, 所有文件都会以文本模式打开。然而, 用户可以在调用相关函数时指定 mode这个形式的参数, 从而覆盖之前的默认行为。一旦发生 I/O错误, 系统将会引发异常。在3.3版进行了更改, 原来这个操作会引发异常, 现在是另一个特定内容的别名。要是说sys.stdin被拿来用了不止一回的话, 那么除开第一次用过的情况以外, 后续再去用的时候一般都不会再返回什么行的结果了, 不过这里面有两个例外, 要么是处于交互式的状态下, 要么就是已经明确地进行了重置操作, 比如说是使用了sys.stdin.seek(0)这种方式进行的。当一个文件打开之后, 它将会立刻被关闭。这种情况在文件列表里一般不会被看到。只有一种特殊情况会被注意到, 那就是当最后一个被打开的文件是空的时候。所返回的那个行, 对于换行符这种符号, 它是不会做出任何处理的动作的。这就导致了一个情况出现, 即文件内部存在的那最后一行, 有可能是不带有换行符的特征的。如果想要管理文件打开的形式, 你能选择把参数传递到相关的方法里作为入口。这个入口一定得是一个代码块, 它需要准备两个输入项, 一个和mode, 最后给出一个根据对应状态准备好的档案实例。目前这个库里已经准备妥当了两个能直接使用的方案。下面是有关这个模块初始接口所对应的以下的这些个函数的。调用输入文件的函数, 设置文件为无, 设置为False, 设置为空字符串, 以只读模式打开, 其他参数设置为None。创建一个 类的实例, 该实例将被用作此模块中函数的全局状态, 并且还将被返回使用在迭代期间。具体的实例能够在语句内部充当上下文管理的责任承担者。在当前的示例情景里面, 当with这一类语句的执行环节告一段落之后, 所谓的input对象肯定会执行关闭操作, 哪怕其间出现了异常状况, 这个关闭动作也绝不会缺席。with fileinput.input(files(spam.txt, eggs.txt)) as f:for line in f:process(line)在3.2版本进行了修改, 允许它被用于作为上下文管理器的场景之中。在 3.8 版更改: 关键字形参 mode 和 现在是仅限关键字形参。以下所示的这些函数, 它们将会去使用由您所创建出来的那个全局状态内容假如当前这里不存在有正在活动的状态情况的话, 那么系统方面将会去引发相关异常。.()当第一行数据尚未读取完毕之前, 当前被读取的文件名称会被返回为 None。.()它会返回一个用整数来显示的具体数值, 这个数值就是咱们当前使用的所谓“文件描述符”, 而如果那个文件并没有处于开启的状态之下, 比如我们正处在第一行还有下一个文件中间这些位置里边的时候, 它又会返回一个负数的1。.()返回被读取的那一个个累计起来的行号的情况, 具体来说就是在第一个行还没有被读完之前这个返回值会是0, 等到最后一个文件的最后的一个行都被读完了之后就会返回那个对应的行号。.()返回当前文件中的行号, 在第一行被读取之前, 返回0, 在最后一个文件的最后一行被读取之后, 返回此文件中该行的行号。.()如果刚读取的行是其所在文件的第一行则返回 True否则返回 False。.()如果最后被读取的那一行是由系统标准输入也就是sys.stdin提供的, 那么这时候就会返回出一个True的值, 要是最后一行并不来自于系统标准输入这个叫做sys.stdin的东西的话, 那就就会返回出一个False的意思。.()先关掉当前正在使用的这个文件, 这样在接着进行下一次循环操作的时候, 系统就会从下一个文件里面去读取第一行内容至于那些没有被读取到的行信息, 它们是不会被算进总行数里面的。要等到下一份文件的第一行数据真正被成功读取之后, 文件名才会发生改变要是第一行还没读呢, 那么这个功能就不会起作用, 也就是说不能用它来跳过第一个文件的内容而且当最后一份文件的最后一行也被读完后, 这个功能就不再有效了。.close()把那个序列给关掉。这个模块里提供的实现了处理序列动作的功能的那些类, 同样也被拿来当作基础, 供那些继承它们的子类去进一步开发和使用:class .(filesNone, False, , *, moder, None)类 是一个实现它的方法 , , , , , , 和 对应于此模块中具有相同名称的函数。 此外它还有一个 方法可返回下一个输入行以及一个 方法该方法实现了序列行为。 这种序列必须以严格的序列顺序来读写随机读写和 不可以被混用。你能够使用 mode 这个手段, 来明确表明需要将文件以什么样的操作方式传递过去。这种特定的方式, 只能从 r、rU、U’以及rb这几个选项之中, 去选取其中的一种作为标准参数。假如提供了该参数, 那么它就必须要变成一个函数, 这个函数会去接收两个参数, 一个叫name, 还有一个叫mode, 并且会根据情况去返回一个被打开的文件类型的对象。你不能够把这两个东西放到一块儿来使用。具体的实例能够在语句内部充当上下文管理的责任承担者。在当前的示例情景里面, 当with这一类语句的执行环节告一段落之后, 所谓的input对象肯定会执行关闭操作, 哪怕其间出现了异常状况, 这个关闭动作也绝不会缺席。with FileInput(files(spam.txt, eggs.txt)) as input:process(input)在3.2版本进行了修改, 允许它被用于作为上下文管理器的场景之中。3.在第八版之后, 这个版本已经把这个功能删除掉了, 并且对于该方法的支持也已经正式弃用不再使用。在 3.8 版更改: 关键字形参 mode 和 现在是仅限关键字形参。存在一个可选的原地过滤的功能: 如果您是向相应的参数或者构造器之中, 传入了等于真值的关键字参数, 那么这个文件就会被移动并变成备份文件, 同时标准输出也会被定向到输入文件去里面假若此时已经存在一个和备份文件名字相同的文件了的话, 那么它将会被无声无息地直接替换掉, 这样一来, 我们就能够编写出一个可以原地把它的输入文件重写一遍的过滤器出来了。假若您设定了那个形参, 这形参长得通常像是一个等于号连着一些空格再接着点加扩展名加尖括号, 它就去确定备份文件用什么作为后缀名字, 这么一来, 备份文件是会被留存下来的, 相反, 要是没有特意去定, 那默认的后缀名字就是点bak这样的东西, 并且它会跟着输出文件在关闭的时候一块儿被抹掉, 再退一步说, 只要存在对标准输入进行读取的动作那原地过滤的功能就给直接关掉了。这个模块, 为大家提供了以下这种两种打开文件钩子的选项呢。.(, mode)使用特定的模块去透明地打开gzip压缩文件和bzip2压缩文件, 系统会通过检查文件的扩展名是不是.gz或者是不是.bz2来识别这些压缩格式。当判断出文件不是这两种格式中的一种时, 也就是文件扩展名不等于.gz同时也等于不于.bz2这样的情况下, 程序就会以正常的手段打开这个文件, 具体就是在读取操作的时候仅仅依赖于标准的内置功能, 而不执行任何的解压工作。这里有一个使用的示范案例, 它是 fi .(.)。., 等于None。返回一个钩子, 这个钩子的作用是打开每一个文件, 并且会使用所给出的参数以及所提供的值来进行文件读取操作。这个例子的操作是, 把变量 fi 赋值给了一个包含 utf-8 编码并且还有一个空字符串的列表。在 3.6 版对相关内容进行了调整, 调整的内容是把可选形参加进去了。
返回列表