python基础教程_学习笔记15:标准库:一些最爱——fileinput
来源:互联网 发布:淘宝网泳衣专卖店 编辑:程序博客网 时间:2024/05/01 18:48
标准库:一些最爱
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
- python基础教程_学习笔记13:标准库:一些最爱——sys
- python基础教程_学习笔记14:标准库:一些最爱——re
- python基础教程_学习笔记16:标准库:一些最爱——random
- python基础教程_学习笔记17:标准库:一些最爱——time
- python基础教程_学习笔记18:标准库:一些最爱——shelve
- python基础教程_学习笔记20:标准库:一些最爱——os
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
- Python基础--人们一些最爱的标准库(sys os fileinput)
- python标准库fileinput模块学习
- python标准库学习3-fileinput
- Python基础--人们一些最爱的标准库(random time)
- python基础教程_学习笔记3:列表
- python基础教程_学习笔记5:字符串
- python基础教程_学习笔记6:字典
- python基础教程_学习笔记9:抽象
- python基础教程_学习笔记10:异常
- python基础教程_学习笔记12:充电时刻——模块
- 尼康数码相机存储卡照片恢复,相机存储卡数据恢复工具
- 文件传输错误 64位到32位系统
- 多式样ProgressBar
- 人脸识别新技术准确率超99%:比肉眼更加精准
- 【编程之美】2.5寻找最大的k个数
- python基础教程_学习笔记15:标准库:一些最爱——fileinput
- 命名空间
- 协议栈各层功能及原语概念
- 斐波那契数列
- R语言中绘制彩色相关性矩阵
- C/C++ 读取文件指定行的内容
- 数学知识在地图开发中的应用
- 自己写的JDK动态代理类
- 空运提单