При использовании open ('output.csv', 'w') это означает, что вы перезаписываете файл каждый раз, когда это выполняется, поэтому каждую итерацию цикла.Это похоже на сохранение нового материала в файл с тем же именем.Материал, который был в файле до сохранения, не будет виден после.Вам нужно использовать open ('output.csv', 'a'), чтобы файл, в который вы записываете, только добавлялся, а не перезаписывался.Однако если вы используете append, вы хотите удалить файл, если он уже существует, в противном случае вы будете добавлять к своим старым результатам.
Вот рабочий пример, я добавил некоторые дополнительные элементы форматирования вдобиться результата, который вы описываете в вопросе
import os
import fnmatch
import re
directory = "directory/"
#Remove the output file if it exists, otherwise you'll have output from the previous execution
if (os.path.exists('output.csv')):
os.remove('output.csv')
for dirpath, dirs, files in os.walk(directory):
for filename in fnmatch.filter(files, '*.html'):
with open(os.path.join(dirpath, filename)) as f:
html = [line.rstrip("\n") for line in f] #Puts each line from the html file into a list
lines = "".join(html) #Concats that list into a single string
line = re.sub(" +", " ", lines) #Gets rid of superfluous whitespace, but substituting any chains of spaces " +" for just one single space
if re.search("apples and oranges", line):
with open('output.csv', 'a') as f: #Changed w (which stand for write) to append. With w the file is rewritten every time it's called. With a the file only has text appended to the end
f.write(line + ",\n")
#Removes the comma and newline at the end of the file
with open("output.csv", 'rb+') as filehandle:
filehandle.seek(-2, os.SEEK_END)
filehandle.truncate()