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參数——它非常easy破坏文件。应该在不使用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
标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...
- python基础课程_学习笔记20:标准库:有些收藏夹——os
标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...
- python基础课程_学习笔记26:编程的乐趣
编程的乐趣 编程柔术 当你坐下来,打算如何组织计划要定时,具体程序,然而,无论什么经验.在实现时间的函数的,你会逐渐学会了原来的设计,实用的新知识.我们不应该忽视沿途汲取的教训,相反,它们用于其他设计 ...
- python基础课程_学习笔记21:文件和材料
文件和材料 打开文件 open功能是用来打开文件,语法例如,下面的: open([name[,mode[,buffering]]) open函数使用一个文件名称作为唯一的强制參数,然后返回一个文件对象 ...
- python基础教程_学习笔记14:标准库:一些最爱——re
标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...
- python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...
- python基础教程_学习笔记18:标准库:一些最爱——shelve
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36029981 标准库:一些最爱 shelve S ...
- python基础教程_学习笔记12:充电时刻——模块
充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...
- python基础课程_2学习笔记3:图形用户界面
图形用户界面 丰富的平台 写作Python GUI程序前,须要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合.能够通过叫做GUI工具包的给定Python模块进行訪问. 工具包 描写叙 ...
随机推荐
- 如何在Android Studio上使用Github
首先,登陆到Github上并创建一个新repository.在屏幕右上角,点击“+”标记,并且选择“New repository”. 现在完成这个表格以新建一个叫做testproject的新repos ...
- JAVA的extends使用方法
理解继承是理解面向对象程序设计的关键.在Java中,通过keywordextends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不同意多继承. (1)继承 ...
- 初窥Linux 之 区分硬连接和软连接
一.Linux下的两种连接文件及创建方式 在Linux下面的连接文件有两种——软连接和硬连接,虽然都是连接文件,但两者却有很大的区别.一种是类似于Windows的快捷方式功能的文件(或目录),这种连接 ...
- codeforces584B Kolya and Tanya
题目链接:http://codeforces.com/problemset/problem/584/B 解题思路:当n=1时,_______ _______ ______ 三个数每位上可以 ...
- [计算机基础]HTTP协议学习笔记
HTTP:Hypertext transfer protocol超文本传输协议是一种详细规定了浏览器和Internet之间互相通信的规则 HTTP允许传输任意类型的数据对象,由Content-Type ...
- oracle数据库单个数据文件的大小限制
之前没有仔细想过这个问题,因为总是不会用到,也没有犯过类似错误. 顺便提一下学习方法吧. 卤肉的学习方法是:常用知识点,熟悉理论并反复做实验,深入理解:不常用的知识点,相关内容都了解大概,遇到问题时想 ...
- nginx+tomcat负载均衡策略
測试环境均为本地,測试软件为: nginx-1.6.0,apache-tomcat-7.0.42-1.apache-tomcat-7.0.42-2.apache-tomcat-7.0.42-3 利用n ...
- ZXing拍摄代码扫描之后以区分一维码、二维码、其他代码
我怎么有二维码没有联系,最近遇到一个问题,,如何推断条码扫描到一维代码或者二维代码,辛苦了一个下午下班后自己,加上网上跟踪信息. 总结出两种方式能够解决该问题(推荐採用另外一种方式): 1.改动源代码 ...
- Android开发技术周报
Android开发技术周报 原文 http://androidweekly.cn/android-dev-weekly-issue48/ 教程 深入理解Android之Gradle Gradle是当 ...
- 管理处理器的亲和性(affinity)
管理处理器的亲和性(affinity) 管理处理器的亲和性(affinity)