import fileinput
carnames = open('car_names.txt').readlines()
carnamit = iter(carnames)
skip = False
for line in fileinput.input(['car_descriptions.txt'], True, '.bak'):
if not skip:
print line,
if '@CAR_NAME' in line:
print next(carnamit),
skip = True
else:
skip = False
def car_names(seq):
yieldnext=False
for line in seq:
if yieldnext: yield line
yieldnext = line.startswith('@CAR_NAME')
现在您可以使用itertools.izip并行地遍历这两个序列:
from itertools import izip
with open(r'c:\temp\cars.txt') as f1:
with open(r'c:\temp\car_names.txt') as f2:
for (c1, c2) in izip(f1, car_names(f2)):
print c1, c2
网友
3楼 ·
发布于 2024-05-19 15:39:09
我不确定我是否完全明白你想做什么,是不是这样?
f1 = open ('car_names.txt')
f2 = open ('car_descriptions.txt')
for car_name in f1.readlines ():
for i in range (6): # echo the first 6 lines
print f2.readline ()
assert f2.readline() == '@CAR_NAME' # skip the 7th, but assert that it is @CAR_NAME
print car_name # print the real car name
for i in range (33): # print the remaining 33 of the original 40
print f2.readline ()
阅读
car_names.txt
将为你节省少量的内存(按今天的标准来看,这真的很小;-)但绝对不会比一口气吞下它快多少(最好是速度完全相同,除非底层操作系统和存储系统在读前向缓存/缓冲方面做得很好,否则速度可能会慢一点。所以我建议:所以测量这个速度,另一个方法是
一开始,我并没有像我的第一个版本那样阅读清单上所有的行——我打赌第一个版本(只要有任何可测量和可重复的差异)会更快。
顺便说一句,标准库的fileinput模块是文档化的here,它确实是一种执行文本文件“虚拟重写”的方便方法(通常将旧版本作为备份,以防万一——但即使机器在操作过程中崩溃,旧版本的数据仍会存在,因此在感觉到“重写”在机器崩溃时是原子性的,一点小小的触碰;-)。
首先,生成一个从序列中检索汽车名称的生成器。你可以每7行屈服一次;我已经让我的屈服,无论哪一行跟在以
@CAR_NAME
开头的那一行后面:现在您可以使用
itertools.izip
并行地遍历这两个序列:我不确定我是否完全明白你想做什么,是不是这样?
相关问题 更多 >
编程相关推荐