Я новичок в Python, и у меня есть только кусочные знания о том, что я нашел на многочисленных веб-страницах.
При этом я пытаюсь найти в файле (~ 10 тыс. Строк) набор критериев, подобный фильтру, который я написал, и затем я хочу напечатать строки, которые соответствуют критериям, и строку, которая является 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 и сравнить с другим файлом, чтобы вывести критерии соответствия в обоих файлах ... но по одному шагу за раз, верно?
-Также не стесняйтесь добавлять в «правильную» технику ... Я уверен, что этот сценарий можно написать лучше, поэтому, пожалуйста, расскажите мне обо всем, что я делаю неправильно.
Заранее спасибо за любую помощь!
UPDATE:
Успешно внедрили это исправление благодаря помощи ниже:
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'
Я продолжал пытаться просто изменить выходной файл с помощью другого отдельного сценария, и я долгое время боролся с проблемами работы и ошибок. Просто решил вернуться к оригинальному сценарию и бросить его туда по прихоти и вириле.
Спасибо, что подтолкнули меня в правильном направлении, оттуда было легко разобраться!