python - 为什么在输入文件中搜索字符串时会出现“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)
解决方案
没有太多理由打开输入文件两次。对于快速简单的脚本,您可以执行以下操作:
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
请注意,这会假设您的意图以及您的输入数据可能是什么样的。
推荐阅读
- javascript - 如何修复 eslint 错误 no-use-before-define
- opencart - 从管理面板更改 Opencart 页面代码是否有任何问题?
- r - Download spedific tab of google sheet in R
- python - 在夹具内的 pytest 中捕获 stderr/stdout
- html - 检查元素,复制某些 div?
- c# - 如何在应用程序启动时创建 Semaphoreslim 实例并在所有请求中使用相同的实例?
- javascript - 放置 gtag 事件片段头 Gatsby/React 站点
- javascript - 使用 setInterval 进行字符串更新的单独动画
- c# - Control.Invalidate() 或 Control.Invalidate(Rectangle)
- python - 将多线程和多处理与 concurrent.futures 相结合