Я хочу прочитать в текстовом файле, который содержит набор тегов «текст». Можно ли использовать красивый суп для вывода содержимого выбранных тегов в CSV?
SampleCode:
from bs4 import BeautifulSoup
text = """<os>Windows Vista or Windows 7</os><filename>AS_ENGINE.EXE</filename><header_size>240</header_size><atime>2019-04-28T13:34:34Z</atime><runs>1</runs><filenames><file>
<os>Windows Vista or Windows 7</os><filename>CHRMSTP.EXE</filename><header_size>240</header_size><atime>2019-04-28T13:15:32Z</atime><runs>2</runs><filenames>
<os>Windows Vista or Windows 7</os><filename>RUNDLL32.EXE</filename><header_size>240</header_size><atime>2019-04-28T13:07:35Z</atime><runs>1</runs><filenames><file>"""
soup = BeautifulSoup(text, "lxml")
for x in soup.find_all("runs"):
print("Orginal ", x)
for x in soup.find_all("dir"):
print("Orginal ", x)
for x in soup.find_all("filename"):
print("Orginal ", x)
Затем я хочу написать определенные теги в CSV ...
fieldnames = 'File Nmae','Number of runs','File Path'
with open("C:\\ProgramData\\processed\\winprefetch.csv", 'w', newline='', encoding="utf8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(fieldnames)
writer.writerows([[diskimage_name * row], filename, numberofruns,file]
Полный код:
Этот первый раздел извлекает название диска, с которого пришла информация
import os
import re
import csv
from bs4 import BeautifulSoup
def regx():
#Gets the disk name
with open("C:\\ProgramData\\\processed\\diskimagename.txt", "r", encoding="utf8") as file:
raw = (str(file.readlines()))
print(raw)
diskimage = re.findall("[^\\\/:*?\"<>|\r\n]+$", raw)
diskimage_edit1 = re.sub("\"", "", str(diskimage))
diskimage_edit2 = re.sub("']", "", diskimage_edit1)
diskimage_name = diskimage_edit2
print(diskimage_name)
file.close()
В следующем разделе извлекаются теги «run» и записывается в массив для записи в CSV-модуль записи.
########################################################
with open("C:\\ProgramData\\output\\winprefetch.txt", "r", encoding="utf8") as file:
print("defo working")
text_raw = ("%s;" % "{;}".join([line.strip().replace("\t", ",") for line in file.readlines()]))
text = re.sub("#.+\B \d.\d{;}", "", text_raw)
arr_prefetch = [r.split(",") for r in [r for r in text.split("{;}")]]
soup = BeautifulSoup(text, "lxml")
#[x.text for x in soup.find_all("runs")]
for x in soup.find_all("runs"):
print("Orginal ", x)
for x in soup.find_all("runs"):
arr_runs = [x]
# print(arr_runs)
#for x in soup.find_all("dir"):
# arr_dir = [x]
print("Domain: ", arr_prefetch)
##############################
#Domain writing to csv
fieldnames = 'Disk Name','Number of runs','File Path','Disk Location', 'FileName', 'Headers'
with open("C:\\ProgramData\\output\\processed\\winprefetch.csv", 'w', newline='', encoding="utf8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(fieldnames)
writer.writerows([[diskimage_name * row, ] for row in arr_prefetch])
csvfile.close()
# #regx
if __name__=="__main__":
regx()
Мне бы хотелось иметь возможность читать в тегах и выбирать, какие из них я хочу записать в CSV, поэтому, например, мне нужен следующий вывод;
Filename Dirc runs
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC
ETC ETC ETC