Как использовать красивый суп для вывода содержимого тегов в CSV? - PullRequest
1 голос
/ 06 мая 2019

Я хочу прочитать в текстовом файле, который содержит набор тегов «текст». Можно ли использовать красивый суп для вывода содержимого выбранных тегов в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...