python读取输入流_遍历Python中多个输入流的行

Python的内置open()函数以读/写模式打开一个文件,并对文件进行读/写操作。要批量处理多个文件,必须使用Python标准库的fileinput模块。该模块提供了Fileinput类,该类具有遍历文件的功能。该模块还出于相同目的定义了助手功能。

此模块的主要接口是input()函数。此函数返回Fileinput类的实例。fileinput.input(files, inplace, mode)

files参数是一个或多个要一一读取的文件的名称。每个文件都充当生成器,并且可以使用for循环对其进行迭代。文件中的每一行都将打印在Python控制台上。>>> for line in fileinput.input('data.txt'):

print (line)

files参数可以是包含许多文件的元组。文件内容将一一显示。>>> for line in fileinput.input(files=('a.txt', 'b.txt')):

print (line)

Fileinput类也可以在with语句中用作上下文管理器。>>> with fileinput.input(files=('a.txt', 'b.txt')) as f:

for line in f:

print (line)

fileinput模块具有以下定义的功能。序号功能说明1filename()

返回当前正在读取的文件的名称。

2fileno()

返回文件描述符整数。

3lineno()

返回正在读取的文件的行号。该数字是累积计数。

4filelineno()仅

返回当前文件的行号。

5如果正在读取当前文件的第一行,则isfirstline()返回true,否则返回false

以下语句打印文件中的每一行以及行号>>> for line in fileinput.input('books.py'):

print ('{}->{}'.format(fileinput.filelineno(), line))

上面代码的示例输出是1->import sqlite3

2->conn = sqlite3.connect('c:/python36/books.db')

3->cursor = conn.cursor()

4->cursor.execute("SELECT * from books;")

5->print(cursor.fetchall())

以下代码在文件夹中打印每个文件名,并在其中带有编号的行。在此程序glob()中,使用的函数可返回当前路径中的文件列表(可选),并带有匹配的通配符。这里glob('*。py')将返回当前文件夹中所有扩展名为.py的文件的列表。此列表用作fileinput.input()函数的files参数。import fileinput, glob, sys

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

if fileinput.isfirstline():

print (fileinput.filename(),'>')

sys.stdout.write ("{}.{}".format(fileinput.filelineno(),line))

注意isfirstline()方法的使用。当新文件的迭代开始时,此函数返回true,并首先打印fileinput.filename()函数返回的文件名,然后显示带数字的行。例如1.py >

1.a = 10

2.b = 20

3.print ('addition=',a+b)

hello.py >

1.x = 10

2.y = 20

3.z = x+y

4.print ("x+y=",z)

就地参数

默认情况下,fileinput.input()函数的inplace = False。如果将其设置为True,则使输入文件可写。

假设有一个“ msg.txt”,其中包含以下文本。Hello Python. Good morning

以下代码使用fileinput模块打开文件并在适当位置修改其内容。>>> for line in fileinput.input(files='msg.txt',inplace = True):

line = line.replace('morning', 'evening')

sys.stdout.write(line)

“ msg.txt”将显示所做的更改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值