osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

creating a csv from information I have printed to screen


Ciar?n Hudson wrote:

> How do I edit the code below to create a csv file which includes the
> information I have printed at the bottom?
> 
> I'm pulling arrival data from an airport website and printing out only the
> flight info. I want to save that flight info to a CSV file.

First of all the data in the html is already structured as a table.
   
You really want to keep that structure instead of reconstructing it from the 
individual cells:

for row in table:
   write cells in row

Then you have to decide on the columns

> print('Arriving From', 'Airline', 'Scheduled to arrive','Latest
> Update','Status')

and I guess they are what you print above. Once you have the data creating 
the csv is easy, Python includes a module for it. So:


import csv, sys
[...]
writer = csv.writer(sys.stdout)
writer.writerow([
    'Arriving From',
    'Airline',
    'Scheduled to arrive', 'Latest Update', 'Status'
])
[table] = soup.find_all("table")
for row in table.find_all("tr"):
    writer.writerow(
        [td.string.strip() for td in row.find_all("td")]
    )

To write to a file instead of stdout pass the writer a file

with open("flight.csv", "w") as f:
    writer = csv.writer(f)
    ...
 
> cells = soup.find_all('td')
> #print(cells)
> 
> for cell in cells:
>     for content in cell.contents:
>         value = str(content).strip().replace('\n', '')
>         if len(value) == 0:
>             print('"0"', end=',')
>         elif value[0].lower() in 'abcdefghijklmnopqrstuvwxyz<':
>             print('\n' + value, end=',')
>         else:
>             print('"' + value + '"', end=',')