首页 > 解决方案 > 在 Python 中使用 readlines() 函数检查即将到来的行的条件

问题描述

我有input.txt文件和output.txt文件,它们在 Python 脚本中传入参数。我正在使用readline()函数读取输入文件内容。在我更新到当前行并将其写入输出文件之前,我想检查即将到来的行的一些条件,如下所述。你能给我一些指导吗?谢谢你。

internal_account如果行以以下条件开头01065008并且满足以下条件,我想从第 11 个位置用值(16 位随机数)更新当前行。

  1. 即将到来的第 5 行以06和开头
  2. 行开头的06USD从第 6 个字符开始

输入.txt

01065008200520P629658405456454
02BRYAN ANGUS      56425555643
0300000000000000000HUTS7858863
04PROSPECTUS ENCLOSYUSS574U623
05AS OF 05/13/20   45452366753
06Q47USDTFT        87845566765

input.txt文件有模式:

1st line will start with 010065008
2nd line will start with 02
...
6th line will start with 06
1st line will start with 010065008
...

我试过什么?

import random
import sys

infile=open(sys.argv[1], 'r')
lines=infile.readlines()

outfile=open(sys.argv[2], 'w')
internal_account = random.randint(1000000000000000,9999999999999999)

formattedStr = ''

for line in lines:
    if line[0:8] == '01065008':
        formattedStr='%s%s%s'%(line[0:10],internal_account,line[26:])
        outfile.write(formattedStr)
    else:
         outfile.write(line)
outfile.close()

标签: pythonreadline

解决方案


要在文本文件中向前检查,请将所有行读入列表,然后使用行索引检查向前行。使用该enumerate函数来跟踪行索引。

ss = '''
01065008200520P629658405456454
02BRYAN ANGUS      56425555643
0300000000000000000HUTS7858863
04PROSPECTUS ENCLOSYUSS574U623
05AS OF 05/13/20   45452366753
06Q47USDTFT        87845566765
'''.strip()
with open ('input.txt','w') as f: f.write(ss)  # write data file

###############################3

import random
import sys

infile=open('input.txt')   #open(sys.argv[1], 'r')
lines=infile.readlines()

outfile=open('output.txt','w')  #open(sys.argv[2], 'w')

internal_account = random.randint(1000000000000000,9999999999999999)
print('internal_account', internal_account, end='\n\n')

formattedStr = ''

for i,line in enumerate(lines):
    line
    if line[0:8] == '01065008' and i < len(lines)-5 and lines[i+5].startswith('06') and lines[i+5][5:8] == 'USD':
        formattedStr='%s%s%s'%(line[0:10],internal_account,line[26:])
        outfile.write(formattedStr)
        print(formattedStr.strip())
    else:
         outfile.write(line)
         print(line.strip())
outfile.close()

输出

internal_account 2371299802657810

010650082023712998026578106454
02BRYAN ANGUS      56425555643
0300000000000000000HUTS7858863
04PROSPECTUS ENCLOSYUSS574U623
05AS OF 05/13/20   45452366753
06Q47USDTFT        87845566765

推荐阅读