python - 如何在正确的 if 语句之前打印第 X 行
问题描述
我对 Python 还是很陌生,对我通过众多网页找到的内容只有零碎的知识。
话虽如此,我正在尝试在文件(约 10k 行)中搜索我编写的一组类似“过滤器”的条件,然后我希望它打印符合条件的行和 X 数量的行它前面的线条。
我创建了以下脚本来打开所述文件,逐行迭代,并将满足过滤条件的行打印到输出文件,但是我很难将其合并到当前脚本中。
import os
output_file = 'Output.txt'
filename = 'BigFile.txt'
numLines = 0
numWords = 0
numChrs = 0
numMes = 0
f1 = open(output_file, 'w')
print 'Output File has been Opened'
with open(filename, 'r') as file:
for line in file:
wordsList = line.split()
numLines += 1
numWords += len(wordsList)
numChrs += len(line)
if "X" in line and "Y" not in line and "Z" in line:
numMes += 1
print >>f1, line
print 'Object found and Catalogued in Output.txt'
print "Lines: %i\nWords: %i\nCharacters: %i" % (numLines, numWords, numChrs)
print >>f1, "Lines: %i\nWords: %i\nCharacters: %i" % (numLines, numWords, numChrs)
print "There are a total of %i thing in this file" % (numMes)
print >>f1, "There are a total of %i things in this file" % (numMes)
f1.close()
print 'Output Files have been Closed'
我的第一个猜测是使用line.enumeration
,但我认为我不能只说lines - 5
打印之前为 5 的行lines
:
lines = f1.enumeration()
if "blah blah" in line and "so so" not in line:
print >>f1, lines
print >>f1, [lines - 5]
最好的部分还没有到来,因为我必须获取 Output.txt 文件并与另一个文件进行比较以输出两个文件中的匹配标准......但一次一步,对吗?
- 也可以随意添加“正确”技术的简介......我相信这个脚本可以写成更好的方式,所以请教育我做任何我做错的事情。
提前感谢您的帮助!
更新:由于以下帮助,已成功实施修复:
import os
output_file = 'Output.txt'
filename = 'BigFile.txt'
numLines = 0
numWords = 0
numChrs = 0
numMulMes = 0
last5 = []
f1 = open(output_file, 'w')
print 'Output Files have been Opened'
with open(filename, 'r') as file:
for line in file:
wordsList = line.split()
numLines += 1
numWords += len(wordsList)
numChrs += len(line)
last5[:] = last5[-5:]+[line]
if "X" in line and "Y" not in line and "Z" not in line:
del last5[1:5] ###the missing piece of the puzzle!
numMulMes += 1
print >>f1, last5
print 'Object found and Catalogued in Output.txt'
print "Lines: %i\nWords: %i\nCharacters: %i" % (numLines, numWords, numChrs)
print >>f1, "Lines: %i\nWords: %i\nCharacters: %i" % (numLines, numWords, numChrs)
print "There are a total of %i messages in this file" % (numMulMes)
print >>f1, "There are a total of %i messages in this file" % (numMulMes)
f1.close()
f3.close()
print 'Output Files have been Closed'
我一直试图通过另一个单独的脚本修改输出文件,并且在最长的时间内我一直在与 str 与 lst 操作和错误问题作斗争。只是决定回到原来的剧本,一时兴起把它扔进去,维奥拉。
感谢您将我推向正确的方向,从那里很容易弄清楚!
解决方案
您自己解决了大部分问题(计算单词、行数、行号等) - 您可以在浏览文件时简单地记住最后 n 行。
例子:
t = """"zero line
one line
two line
three line
four line
five line
six line
seven line
eight line
"""
last5 = [] # memory cell
for l in t.split("\n"): # similar to your for line in file:
last5[:] = last5[-4:]+[l] # keep last 4 and add current line, inplace list mod
if "six" in l:
print last5
您还可以查看deque并指定一个最大长度(您需要导入它)
from collections import deque
last5 = deque(maxlen=5)
for l in t.split("\n"):
last5.append(l) # will automatically only keep 5 (maxlen)
if "six" in l:
print last5
输出:
# list version
['two line', 'three line', 'four line ', 'five line ', 'six line']
# deque version
deque(['two line', 'three line', 'four line ', 'five line ', 'six line'], maxlen=5)
推荐阅读
- c# - 仅从字符串中查找带点的数字
- c# - 如何在连接字符串位于数据库中的情况下触发迁移
- java - 错误:找不到符号方法 contextModule(ContextModule)
- python - 如何使用 Python 为 Django 编写竞赛条件的单元测试?
- python - 组合框函数 currentIndexChanged 无法正常工作
- java - 将 JdbcTemplate 与 CrudRepository 混合是否有意义?
- javascript - 如何为表单字段添加名称/如何引用 id [.module Drupal]?
- plsql - 如何在本地计算机上设置 PL/SQL 项目
- java - 编写一个程序,提示输入三角形的边长并报告三个角
- c# - 类未定义