首页 > 解决方案 > 为什么在输入文件中搜索字符串时会出现“StopIteration”?

问题描述

在我的工作中,我们有一个由软件创建的文本文件。我想创建一个可以从命令行运行的脚本,该脚本针对输入文件运行,扫描字符串“Item Value:”并将该行关键字后面的值打印到新的文本文件中。

这不起作用,但这是我通过阅读此处的其他问题得出的结论:

import sys
inFile = sys.argv[1]
outFile = sys.argv[2]

with open(inFile,'r') as i:
    lines = i.readlines()

with open(inFile, 'r') as f:
    while not 'Item Value:' in next(f):
        pass
    for lines in f:
        print(lines)

with open(outFile,'w') as o:
    for lines in f:
        o.write(lines)

当我尝试像这样运行 CL 时:

python pythonscript.py inputfile.txt output.txt 

我收到此错误:

 File "pythonscript.py", line 10, in <module>
 while not 'Item Value:' in next(f):
 StopIteration

当前代码:

import sys
inFile = sys.argv[1]
outFile = sys.argv[2]

with open(inFile,'r') as i:
    lines = i.readlines()

with open(inFile, 'r') as f:
    for line in f:
        if 'Item value:' in line:
            break

    with open(outFile,'w') as o:
        for lines in f:
             o.write(lines)

标签: pythonstringinputtext

解决方案


没有太多理由打开输入文件两次。对于快速简单的脚本,您可以执行以下操作:

import sys

f_name = sys.argv[1]
output_file = sys.argv[2]

with open(f_name, 'r') as f:
    lines = f.readlines()
    for line in lines:
        split_line = line.split(':')
        if split_line[0] == 'Item Value':
            print(split_line[1:])
            with open(output_file, 'w') as o:
                for output_item in split_line[1:]:
                    o.write(output_item)
            break

请注意,这会假设您的意图以及您的输入数据可能是什么样的。


推荐阅读