[英]Check if item is in range of a list of tuples
我有一个文件,其中只需要修改特定的“块”行,在这种情况下,我想检索 a 和 b 之间的行,包括这些行:
1
2 a
3
4 b
5
6
7 a
8
9
10 b
现在我有一个元组列表,它指示我需要在哪些行索引之间修改内容:[(2, 4), (7, 10)]。
现在我需要替换那些行的内容,所以像
with open("file.txt") as file1:
for index, line in enumerate(log, start=1):
if index in range(**OF ONE OF THE TUPLES IN THE LIST**):
line = ....
我不明白如何在没有嵌套循环和重复内容/多次打开文件的情况下实现这一点。
想法?
这是一个可能的解决方案:
ranges = [(2, 4), (7, 10)]
for line_index in range(number_of_lines):
if any(line_index in range(start, end + 1) for start, end in ranges):
# TODO
# Replace line with something
假设您的范围已排序,您可以编写一个生成器,该生成器将为范围内的数字生成True
,为其他数字生成False
:
def ranges(rngs, start=0):
for a, b in rngs:
for _ in range(start, a):
yield False
for _ in range(a, b):
yield True
start = b
while True:
yield False
并将其与文件迭代器结合起来:
for change, line in zip(ranges(your_ranges), file1):
if change:
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.