使用python从csv文件读取数据作为输入并将输出写入csv文件

时间:2019-12-11 09:10:45

标签: python csv

我有一个csv文件,其中包含以下数据:年,标题,作者。 例如:

Year,Title,Author
2018,Becoming,Michelle Obama
2018,Educated,Tara Westover
2018,Grant,Ron Chernow

我想再添加两列,一列用于字数统计,一列用于页数统计。

我编写了以下脚本,该脚本打开一个网页,搜索该书并提取字数和页数信息。

driver = webdriver.Chrome(chromedriver)
driver.get('https://www.readinglength.com/')
driver.maximize_window()
driver.implicitly_wait(10)
time.sleep(5)
search_box = driver.find_element_by_id("downshift-0-input")
search_box.send_keys(title)
search_box.submit()
driver.implicitly_wait(10)
word_count = driver.find_element_by_xpath("//div[@class='book-data']//div[2]").text
page_count = driver.find_element_by_xpath("//div[@class='book-data']//div[4]").text
print(word_count)
print(page_count)
time.sleep(5)
driver.quit()

我想执行以下操作:

从csv文件中获取标题并将其输入搜索中。 提取字数和页数信息,并将其添加到相应的行和列中。 对csv中的每个标题/行重复此操作。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:0)

在python中,处理.csv文件的最佳方法是使用一个名为pandas的软件包。熊猫具有读取csv https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html的功能 从那里开始,您可以使用csv做很多事情(在熊猫中,它表示为一种称为DataFrame的特殊数据类型)。例如,参见https://www.geeksforgeeks.org/adding-new-column-to-existing-dataframe-in-pandas/如何添加列。

当然,您可以使用另一个软件包来读取csv文件-该文件称为csv,此处显示了一个简短的教程https://realpython.com/python-csv/

我希望这会对您有所帮助:)

答案 1 :(得分:0)

类似的事情应该起作用。请根据需要进行修改。

import pandas as pd

def web_search(title: str):
    driver = webdriver.Chrome(chromedriver)
    driver.get('https://www.readinglength.com/')
    driver.maximize_window()  
    driver.implicitly_wait(10)  
    time.sleep(5)  
    search_box = driver.find_element_by_id("downshift-0-input")
    search_box.send_keys(title)
    search_box.submit()
    driver.implicitly_wait(10)
    word_count = driver.find_element_by_xpath("//div[@class='book-data']//div[2]").text
    page_count = driver.find_element_by_xpath("//div[@class='book-data']//div[4]").text
    print(word_count)
    print(page_count)
    time.sleep(5) 
    driver.quit()
    return word_count, page_count

df = pd.read_csv(file)

for index, row in df.iterrows():
    print("Retrieving "+ str(row.title))
    word_count, page_count = web_search(row.title)
    df.loc[index,'word_count'] = word_count
    df.loc[index, 'page_count'] = page_count

df.to_csv('newfile.csv')

答案 2 :(得分:0)

使用pandas软件包似乎是最方便的方法。 pandas提供了DataFrame类,该类具有用于读取和写入csv的不错的方法,还提供了一种apply方法,利用该方法我们可以基于其他列的值来创建新列。您的用例看起来像这样(我没有测试您的代码,只是将其粘贴到fetch_data()函数中):

import time
import pandas as pd
from selenium import webdriver


def fetch_data(title):
    driver = webdriver.Chrome(chromedriver)
    driver.get('https://www.readinglength.com/')
    driver.maximize_window()  
    driver.implicitly_wait(10)  
    time.sleep(5)  
    search_box = driver.find_element_by_id("downshift-0-input")
    search_box.send_keys(title)
    search_box.submit()
    driver.implicitly_wait(10)
    word_count = driver.find_element_by_xpath("//div[@class='book-data']//div[2]").text
    page_count = driver.find_element_by_xpath("//div[@class='book-data']//div[4]").text
    time.sleep(5) 
    driver.quit()

    return word_count, page_count

def process_file(input_file_path, output_file_path):
    df = pandas.read_csv(input_file_path)
    df[['word_count', 'page_count']] = df['title'].apply(fetch_data).apply(pd.Series)

    df.to_csv(output_file_path)

pandas的主要优点-在数据帧上快速执行操作-与您的情况无关紧要,因为Web解析花费更多时间,但是用pandas这样做仍然是非常方便,简洁和易读的我会说,编写代码的方式。