【问题标题】:Updating a CSV file in Python在 Python 中更新 CSV 文件
【发布时间】:2019-11-19 19:59:41
【问题描述】:

我正在尝试更新一个 csv 文件,https://www.kaggle.com/carolzhangdc/imdb-5000-movie-dataset

在这个 csv 文件的末尾,我试图将一个新的 url 附加到电影的图像中。

我的代码在下面

import csv
from bs4 import BeautifulSoup
import urllib2

with open('movie_metadata.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            print('Column names are {}'.format(", ".join(row)))
            row[-1] = "movie_links"
            line_count += 1
        else:
            imdb_link = row[17]
            soup = BeautifulSoup(urllib2.urlopen(imdb_link).read(), features="html.parser")
            link = soup.find_all('div', {'class': 'poster'})
            if link:
                row[-1] = link[0].find('img')['src']
            line_count += 1
    print('Processed {} lines.'.format(line_count))

我正在 row[-1] 创建一个新行并尝试更新 csv 文件 if link:

但它根本没有更新我的 csv 文件,在我运行我的代码后它保持不变。

【问题讨论】:

  • 好像没有回信?
  • 您正在使用 csv 阅读器。读者不写。使用 csv writer 编写。
  • 尝试修改 CSV 将比您需要的要困难得多。您需要读入整个文件,创建新内容,并在 1 go 中覆盖整个文件

标签: python python-3.x csv


【解决方案1】:

您是否意识到您覆盖了数组row 中的最后一个元素?您应该append() 而不是更改[-1]。试试:

row.append("movie_links") 而不是row[-1] = "movie_links"

row.append(link[0].find('img')['src']) 而不是row[-1] = link[0].find('img')['src']

然后,要实际编写 CSV 文件,请将 csv.writer 与新行一起使用(此处的文档:https://docs.python.org/3/library/csv.html)。

注意,row + ["movie links"] 第一个是另一种追加方式。使用[-1] 覆盖最后一个元素而不是追加!如果你想让我为你编写 csv 写作部分的代码,请告诉我。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2020-12-20
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多