基于要在python中与上述模式一起打印下一行的模式

时间:2019-01-06 10:11:40

标签: python perl unix

我是否需要执行以下任务在python中遇到问题。

  1. 无论是004还是008,我都需要从第11位到第13位的直线中寻找图案。
  2. 如果以上匹配成功,则需要从第13位到第18位打印数据,并需要打印下一行。

输入数据:

CH0012012300123476
CH0012012300423458
BXXXXXXX
CH0012012300823987
AXXXXXXX
CH0012012300523234

输出:

423458BXXXXXXX
823987AXXXXXXX

1 个答案:

答案 0 :(得分:0)

在Python中,您可以只在行上进行迭代,并在需要时使用next获取下一行。由于这将转发要迭代的同一迭代器,因此在这种情况下,for循环不会读取BIC。

s = """CH0012012300123476
CH0012012300423458
BXXXXXXX
CH0012012300823987
AXXXXXXX
CH0012012300523234"""

it = iter(s.splitlines())
for line in it:
    if line[10:13] in ["004", "008"]:
        print(line[12:] + next(it))
# 423458BXXXXXXX
# 823987AXXXXXXX

请注意,如果该行少于11个字符,则line[10]可能会引发IndexError,但切片将仅返回一个空切片。


遍历文件可访问行中的迭代器(包括换行符):

with open(filename) as f:
    for line in f:
        if line[10:12] == '00' and line[12] in '48':
            print(line[12:18], next(f), sep='')

但最后还是和上面一样。