【发布时间】:2018-04-24 21:35:26
【问题描述】:
我对 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 来打印lines 之前的第5 行:
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 操作和错误问题作斗争。只是决定回到原来的剧本,一时兴起把它扔进去,维奥拉。
感谢您将我推向正确的方向,从那里很容易弄清楚!
【问题讨论】:
-
如果你在 *nix 机器上,
grep内置了这个功能。
标签: python python-2.7 list tuples enumeration