python基础教程_学习笔记15:标准库:一些最爱——fileinput

标准库:一些最爱

fileinput

重要的函数


函数


描述


input([files[,inplace[,backup]])


便于遍历多个输入流中的行


filename()


返回当前文件的名称


lineno()


返回当前(累计)的名称


filelineno()


返回当前文件的行数


isfirstline()


检查当前行是否是文件的第一行


isstdin()


检查最后一行是否来自sys.stdin


nextfile()


关闭当前文件,移动到下一个文件


close()


关闭序列

fileinput.input是其中最重要的函数。它会返回能够用于for循环遍历的对象,如果不想使用默认行为(fileinput查找需要循环变量的文件),那么可以给函数提供(序列形式的)一个或多个文件名。还能将inplace参数设置为真值(inplace=True)以进行原地处理。对于要访问的每一行,需要打印出替代的内容,以返回到当前的输入文件中。在进行原地处理的时候,可选的backup参数将文件名扩展备份到通过原始文件创建的备份文件中。

fileinput.filename函数返回当前正在处理的文件名。

fileinput.lineno返回当前行的行数。这个数值是累计的,所以在完成一个文件的处理并且开始处理下一个文件的时候,行数并不会重置,而是将上一个文件的最后行数加1作为计数的起始。

fileinput.filelineno返回当前处理文件的当前行数。每次处理完一个文件并且开始处理下一个文件时,行数都会重置为1,然后重新开始计数。

fileinput.isfirstline函数在当前行是当前文件的第一行时返回真值,反之返回假值。

fileinput.isstdin函数在当前文件为sys.stdin时返回真值, 否则返回假值。

fileinput.nextfile函数会关闭当前文件,跳到下一个文件,跳过的行并不计。在你知道当前文件已经处理完的情况下,就比较有用了。

fileinput.close函数关闭整个文件链,结束迭代。

$ cat numberlines.py

# File : numberlines.py

import fileinput

for line in fileinput.input(inplace=1):

line=line.rstrip()

num=fileinput.lineno()

print ‘%-40s # %2i‘ %(line,num)

$ python numberlines.py  numberlines.py

结果

$ cat numberlines.py

# File : numberlines.py #  1

#  2

import fileinput #  3

#  4

for line in fileinput.input(inplace=1): #  5

line=line.rstrip()               #  6

num=fileinput.lineno() #  7

print ‘%-40s # %2i‘ %(line,num) #  8

如果运行多次,则每次运行都会在每一行末尾添加多个行号,但这不一定是我们想要的效果。

$ python numberlines.py  numberlines.py

结果

$ cat numberlines.py

# File : numberlines.py #  1 #  1

#  2 #  2

import fileinput #  3 #  3

#  4 #  4

for line in fileinput.input(inplace=1): #  5 #  5

line=line.rstrip() #  6 #  6

num=fileinput.lineno() #  7 #  7

print ‘%-40s # %2i‘ %(line,num) #  8 #  8

警告:要小心使用replace参数——它很容易破坏文件。应该在不使用inplace设置的情况下细测自己的程序,在确保程序工作正常后再修改文件。

练习 遍历文本文件

脚本内容

$ cat fileinput-example-1.py

#File : fileinput-example-1.py

import fileinput

import sys

for line in fileinput.input("sys-argv-example-1.py"):

sys.stdout.write("->")

sys.stdout.write(line)

执行结果

$ python fileinput-example-1.py

-># File:sys-argv-example-1.py

->

->import sys

->

->print "Script name is",sys.argv[0]

->

->if len(sys.argv) > 1:

->      print "there is",len(sys.argv)-1,"arguments:"

->      print [x for x in sys.argv[1:]]

->else:

->      print "there are no arguments!"

练习 处理多文件

脚本内容

$ cat fileinput-example-2.py

#File : fileinput-example-2.py

import fileinput

import sys,string

import glob

for line in fileinput.input(glob.glob("sys-exit-*.py")):

if fileinput.isfirstline():

sys.stderr.write("-- reading %s --\n" % fileinput.filename())

sys.stdout.write(str(fileinput.lineno()) + " " + string.upper(line))

执行结果

$ python fileinput-example-2.py

-- reading sys-exit-example-1.py --

1 #FILE :SYS-EXIT-EXAMPLE-1.PY

2

3 IMPORT SYS

4 PRINT "HELLO"

5 SYS.EXIT(1)

6 PRINT "THERE"

7

-- reading sys-exit-example-2.py --

8 #FILE :SYS-EXIT-EXAMPLE-2.PY

9

10 IMPORT SYS

11 PRINT "HELLO"

12 TRY:

13      SYS.EXIT(1)

14 EXCEPT SYSTEMEXIT:

15      PASS

16 PRINT "THERE"

17

练习 转换CRLF为LF

$ cat fileinput-example-3.py

#File : fileinput-example-3.py

import fileinput,sys

for line in fileinput.input(inplace=1):

if line[-2:]=="\r\n":

line=line[:-2]+"\n"

sys.stdout.write(line)

python基础教程_学习笔记15:标准库:一些最爱——fileinput

时间: 2024-12-26 07:55:21

python基础教程_学习笔记15:标准库:一些最爱——fileinput的相关文章

python基础教程_学习笔记17:标准库:一些最爱——time

标准库:一些最爱 time time模块所包含的函数能够实现以下功能: 获取当前时间.操作系统时间和日期.从字符串读取时间以及格式化时间为字符串. 日期可以用实数(从"新纪元"的1月1日0点开始计算到现在的秒数,新纪元是一个与平台相关的年份,对unix来说是1970年),或者是包含有9个整数的元组. 日期元组的字段含义 如元组: (2008,1,21,12,2,56,0,21,0) 表示2008年1月21日12时2分56秒,星期一,且是当年的第21天(无夏令时). 索引 字段 值 0

python基础教程_学习笔记16:标准库:一些最爱——random

标准库:一些最爱 random random模块包括返回随机数的函数,可以用于模拟或者用于任何产生随机输出的程序. 事实上,所产生的数字都是伪随机数,它们以一个可预测的系统作为基础,除非是为了强加密的目标,否则这些随机数还是足够随机的.如果真的需要随机性,可以使用os模块的urandom函数. 重要函数 函数 描述 random() 返回0<=n<1之间的随机实数n,其中0<n<=1 getrandbits(n) 以长整型形式返回n个随机位(二进制数) uniform(a,b) 返

python基础教程_学习笔记14:标准库:一些最爱——re

标准库:一些最爱 re re模块包含对正则表达式的支持,因为曾经系统学习过正则表达式,所以基础内容略过,直接看python对于正则表达式的支持. 正则表达式的学习,见<Mastering Regular Expressions>(精通正则表达式) re模块的内容 最重要的一些函数 函数 描述 compile(pattern[,flags]) 根据包含正则表达式的字符串创建模式对象 search(pattern,string[,flags]) 在字符串中寻找模式 match(pattern,st

python基础教程_学习笔记20:标准库:一些最爱——os

标准库:一些最爱 os os模块为你提供了访问多个操作系统服务的功能. os和它的子模块os.path还包括一些用于检查.构造.删除目录和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和变量 函数/变量 描述 environ 对环境变量进行映射 system(command) 在子shell中执行操作系统命令 sep 路径中的分隔符 pathsep 分隔路径的分隔符 linesep 行分隔符('\n','\r','\r\n') urandom(n) 返回n字节的加密强随机数据 os

python基础教程_学习笔记13:标准库:一些最爱——sys

标准库:一些最爱 sys sys这个模块让你能够访问与python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描述 argv 命令行参数,包括脚本名称 exit([arg]) 退出当前程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 类似sunos5或者win32的平台标识符 stdin 标准输入流--一个类文件对象 stdout 标准输出流--一个类文件对象 stde

python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

标准库:一些最爱 集合.堆和双端队列 集合 集合Set类位于sets模块中. >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> set(range(10)) set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 集合是由序列(或其他可迭代的对象)构建的.主要用于检查成员资格,因此,副本是被忽略的: >>> range(10)*2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9

python基础教程_学习笔记18:标准库:一些最爱——shelve

标准库:一些最爱 shelve Shelve唯一有趣的函数是open.在调用它的时候(使用文件名作为参数),它会返回一个Shelf对象,可以用它来存储内容.只需要把它当作普通的字典(但是键一定要作为字符串)来操作即可,在完成工作之后,调用它的close方法. 意识到shelve.open函数返回的对象并不是普通的映射是很重要的. >>> import shelve >>> s=shelve.open('a.txt') >>> s['x']=['a','

python基础教程_学习笔记23:图形用户界面

图形用户界面 丰富的平台 在编写Python GUI程序前,需要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合,可以通过叫做GUI工具包的给定Python模块进行访问. 工具包 描述 Tkinter 使用Tk平台.很容易得到.半标准. wxpython 基于wxWindows.跨平台越来越流行. PythonWin 只能在Windows上使用.使用了本机的Windows GUI功能. JavaSwing 只能用于Jython.使用本机的Java GUI. PyGTK 使用GTK

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是