Python: экспорт табличных выходных данных в CSV-файл - PullRequest
0 голосов
/ 09 октября 2018

Я хочу сохранить данные таблицы HTML в файл CSV.

Я написал следующий код, используя python, selenium, BeautifulSoup, pandas, tabulate, numpy.

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
from tabulate import tabulate
import numpy as np     
#---Some code are here
datalist2 = []
for i in range(1, total+1):
    xpath="/html/body/div[3]/table/tbody/tr/td[2]/div[2]/table/tbody/tr["+str(i)+"]/td[1]/a/img"
    driver.find_element_by_xpath(xpath).click()
    print("Open button " + str(i) + " Clicked")
    soup_level2=BeautifulSoup(driver.page_source, 'lxml')
    table2=soup_level2.find_all('table')[0]
    df2=pd.read_html(str(table2),header=0)
    datalist2.append(df2[0])
    driver.execute_script("window.history.go(-1)")
    print("moving_back_to_previous_page")   
for i in range(len(datalist2)):
        print(tabulate(datalist2[i]))
#text_file=open("output.csv","w")
#text_file.write(str(datalist2))
#text_file.close()  
#print("report generated and saved")
#np.savetxt("output.csv", datalist2, delimiter=",", fmt='%s')

Этот код print(tabulate(datalist2[i])) отображает данные таблицы в консоли.

Пример вывода print(tabulate(datalist2[i]))

 0  Date Crashed    nan  2018-10-09 07:56:49 UTC
 1  Date Reported   nan  2018-10-09 07:56:57 UTC
 2  Date Built      nan  2018-06-06 01:26:35 UTC
 3  Crash Reason    nan  SIGSEGV
 4  Crash Addr      nan  0x0
 5  Dump file name  nan  9556393da77a562fa086b0147a37106c6ff4bb76_mac14B7F66_dat2018-10-09-07-56-49_boxXB6_modC40COM_54dc2dd1-9abe-a568-1e3119e4-1908ccb0.dmp.tgz

Этот код text_file.write(str(datalist2)) сохраняет datalist2 в файл CSV.Есть проблема с этим кодом.Это не показывает длинный текст.Например, индекс 5 не может полностью отобразить имя файла дампа.Пример вывода text_file.write(str(datalist2))

0     Date Crashed         NaN                            2018-10-09 07:56:49 UTC
1    Date Reported         NaN                            2018-10-09 07:56:57 UTC
2       Date Built         NaN                            2018-06-06 01:26:35 UTC
3     Crash Reason         NaN                                            SIGSEGV
4       Crash Addr         NaN                                                0x0
5   Dump file name         NaN  9556393da77a562fa086b0147a37106c6ff4bb76_mac14...

Я также хочу удалить столбец индекса, а второй столбец содержит «nan» в качестве значения.Я хочу сохранить эти данные в файл CSV.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Чтобы удалить столбец индекса и второй столбец, содержащий пустые значения, отображаемые как «NaN»

soup_level2=BeautifulSoup(driver.page_source, 'lxml')
table2=soup_level2.find_all('table')[0]
table_body = table2.find_all('tbody')[0]
rows = table_body.find_all('tr')
for row in rows:
    cols = row.find_all('td')
    cols = [ele.text.strip() for ele in cols]
    datalist2.append([ele for ele in cols if ele]) # Get rid of empty values

Следующий код для экспорта выходных данных в виде таблицы в файл CSV

content2=tabulate(datalist2, tablefmt="tsv")
text_file=open("output.csv","w")
text_file.write(content2)
text_file.close()

Теперь он также отображает длинный текст.

Следующий код экспортирует datalist2 в CSV с использованием 'numpy'

np.savetxt("output_np.csv", datalist2, delimiter=",", fmt='%s'    

Следующий код экспортирует datalist2 в CSV с использованием 'pandas'

my_df=pd.DataFrame(datalist2)
my_df.to_csv('output.csv', index=False, header=False)
0 голосов
/ 09 октября 2018

Это из-за ширины столбца по умолчанию в пандах, которая равна 50. Вы можете просто установить максимальную длину, которую вы ожидаете, или установить -1, чтобы отключить максимальную ширину столбца.

Добавьте следующую строкуперед написанием:

pd.set_option('display.max_colwidth', -1)

Подробности смотрите по ссылке: https://pandas.pydata.org/pandas-docs/stable/options.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...