标准库:有些收藏夹

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的更多相关文章

  1. python基础课程_学习笔记13:标准库:有些收藏夹——sys

    标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...

  2. python基础课程_学习笔记20:标准库:有些收藏夹——os

    标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...

  3. python基础课程_学习笔记26:编程的乐趣

    编程的乐趣 编程柔术 当你坐下来,打算如何组织计划要定时,具体程序,然而,无论什么经验.在实现时间的函数的,你会逐渐学会了原来的设计,实用的新知识.我们不应该忽视沿途汲取的教训,相反,它们用于其他设计 ...

  4. python基础课程_学习笔记21:文件和材料

    文件和材料 打开文件 open功能是用来打开文件,语法例如,下面的: open([name[,mode[,buffering]]) open函数使用一个文件名称作为唯一的强制參数,然后返回一个文件对象 ...

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

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

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

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...

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

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36029981 标准库:一些最爱 shelve S ...

  8. python基础教程_学习笔记12:充电时刻——模块

    充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...

  9. python基础课程_2学习笔记3:图形用户界面

    图形用户界面 丰富的平台 写作Python GUI程序前,须要决定使用哪个GUI平台. 简单来说,平台是图形组件的一个特定集合.能够通过叫做GUI工具包的给定Python模块进行訪问. 工具包 描写叙 ...

随机推荐

  1. js弹出对话框,遮罩效果,

    刚刚来到实习单位,我跟着廖哥做项目.然后他分配给我一个小小的任务,实现起来总的效果如下: 然后,但我们单击显示数目这个链接的时候,就会弹出一个又遮罩效果的对话框,如下图: 当我们在对话框中再点击里面的 ...

  2. [置顶] Cocos2d-x 实例源码分析之二 小实例的主框架

    这篇文章是分析第一个小实例ActionTest的源码.其实所有实例程序的结构都是一样的,只有特定方法里的代码不同,大的框架都是一样的.也就是说看完这篇文章你就可以自己开始分析其他源码了. 废话不多说, ...

  3. Spark&amp;Spark性能调优实战

    Spark特别适用于多次操作特定的数据,分mem-only和mem & disk.当中mem-only:效率高,但占用大量的内存,成本非常高;mem & disk:内存用完后,会自己主 ...

  4. <Win32_14>__win32控件(2)__教你自学掌握所有控件的玩法

    学习win32 API 编程,我们应该善于利用微软给我们提供的一些辅助工具,例如大家都知道的MSDN.SPY++等等. 今天在讲述之前呢,先给大家介绍一个很有用的工具——Control Spy——它的 ...

  5. Java 建立mysql数据库连接的语句

    每次在面试时被问到jdbc的数据路链接过程都卡着,这次不怕了,背会了... 第一个,比较粗糙的 try{   Class.forName("com.mysql.jdbc.Driver&quo ...

  6. CreateThread、_beginthreadex和AfxBeginThread 的区别

    CreateThread._beginthreadex和AfxBeginThread 创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整 ...

  7. hdu1495之经典搜索

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践

    这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...

  9. jQuery简单过滤选择器

    <html xmlns="http://www.w3.org/1999/xhtml"> <head>     <!--jQuery选择器详解 根据所获 ...

  10. Kafka 高性能吞吐揭秘

    Kafka 高性能吞吐揭秘   Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分 ...