簡體   English   中英

寫入 CSV 文件並使用 python 添加列?

[英]Writing to a CSV file and adding columns using python?

所以我以前從來沒有真正使用過 import csv ,但我已經設法從網站上抓取了一堆信息,現在想把它們放在 csv 文件中。 我遇到的問題是我所有的列表值都用逗號分隔(即 Jane Doe = J,a,n,e, ,D,o,e)。

另外,我有三個列表(一個帶有名稱,一個帶有電子郵件,一個帶有標題),我想將它們分別添加為 CSV 文件中的自己的列(因此 col1 = 名稱,col2 = 標題,col3 = 電子郵件)

關於如何執行此操作的任何想法? 謝謝。


from bs4 import BeautifulSoup
import requests
import csv


urls = ''

with open('websites.txt', 'r') as f:
    for line in f.read():
        urls += line

urls = list(urls.split())

name_lst = []
position_lst = []
email_lst = []

for url in urls:

    print(f'CURRENTLY PARSING: {url}')
    print()

    res = requests.get(url)
    soup = BeautifulSoup(res.text, 'html.parser')

    try:
        for information in soup.find_all('tr', class_='sidearm-staff-member'):
            names = information.find("th", attrs={'headers': "col-fullname"}).text.strip()
            positions = information.find("td", attrs={'headers': "col-staff_title"}).text.strip()
            emails = information.find("td", attrs={'headers': "col-staff_email"}).script
            target = emails.text.split('var firstHalf = "')[1]
            fh = target.split('";')[0]
            lh = target.split('var secondHalf = "')[1].split('";')[0]
            emails = fh + '@' + lh

            name_lst.append(names)
            position_lst.append(positions)
            email_lst.append(emails)


    except Exception as e:
        pass
       
with open('test.csv', 'w') as csv_file:
    csv_writer = csv.writer(csv_file)
    for line in name_lst:
        csv_writer.writerow(line)
    for line in position_lst:
        csv_writer.writerow(line)
    for line in email_lst:
        csv_writer.writerow(line)

逐列寫入數據很容易。 您所要做的就是編寫每行包含具有相同列表索引的 3 個表的元素的行。 這是代碼:

with open('test.csv', 'w') as csv_file:
    csv_writer = csv.writer(csv_file)
    for name, position, email in zip(name_lst, position_lst, email_lst):
        csv_writer.writerow([name, position, email])

假設 name_lst、position_lst 和 email_lst 都是正確的並且大小相同,您的問題出在代碼的最后一部分,您將其寫入 CSV 文件。

這是一種方法:

fieldnames = ['Name', 'Position', 'Email']
with open('Data_to_Csv.csv', 'w') as csvfile:
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for i in range(len(name_lst)):
        writer.writerow({'Name':name_lst[i],'Position':position_lst[i], 'Email':email_lst[i]})

如果列表的長度不相等,這當然會失敗。 您需要確保為不可用的條目添加虛擬值,以確保 3 個列表具有相同數量的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM