【问题标题】:Python check if value in csv filePython检查csv文件中的值
【发布时间】:2023-03-30 10:17:02
【问题描述】:

我得到了 URL 列表,例如:

urls_list = [
    "http://yandex.ru",
    "http://google.ru",
    "http://rambler.ru",
    "http://google.ru",
    "http://gmail.ru",
    "http://mail.ru"
]

我需要打开 csv 文件,检查文件中列表中的每个值 - 跳到下一个值,否则(如果值不在列表中)将此值添加到列表中。

结果:第一次运行 - 添加所有行(如果文件为空),第二次运行 - 什么都不做,因为所有元素都在文件中。

写了代码,但它的工作完全不正确:

import csv


urls_list = [
    "http://yandex.ru",
    "http://google.ru",
    "http://rambler.ru",
    "http://google.ru",
    "http://gmail.ru",
    "http://mail.ru"
]



with open('urls_list.csv', 'r') as fp:
    for row in fp:
        for url in urls_list:
            if url in row:
                print "YEY!"
            with open('urls_list.csv', 'a+') as fp:
                wr = csv.writer(fp, dialect='excel')
                wr.writerow([url])

【问题讨论】:

  • 您正在以读取模式打开文件,而不是在读取时重新打开以追加。有一切问题的根源。
  • 正如 Mauro 所说:使用第二个文件追加。
  • 但是我需要在 csv 文件中添加列表元素并检查元素是否不在文件中 - 执行一些代码并在文件中写入元素,如果文件中的元素跳过此元素并转到下一个,如果下一个元素不在文件中 - 执行一些代码并在文件中写入元素等...
  • 你真的需要csv吗?考虑到您的文件只有一列
  • 我实现这一目标的主要目标: 1. 我解析 xml 站点地图并访问每个链接。 2. 解析内容,存入文件。 3. 我需要检查我是否已经解析了这个 url - 跳过,然后转到下一个 url。

标签: python loops csv if-statement


【解决方案1】:

将文件读入一个变量-

with open('urls_list.csv', 'r') as fp:
    s = fp.read()

检查每个列表项是否在文件中,如果没有则保存

missing = []
for url in urls_list:
    if url not in s:
        missing.append(url + '\n')

将丢失的 url 写入文件

if missing:
    with open('urls_list.csv', 'a+') as fp:
        fp.writelines(missing)

【讨论】:

  • 这适用于 524,000 行(甚至 1.3B 行)的 csv 文件吗?这将需要具有足够 RAM 的大型机器来保存这么多数据。
  • @SwapnilB。 - 您需要尝试或尝试一些更小的东西并确定内存要求。如果搜索列表或搜索空间太大而无法放入内存,还有其他方法可以解决此问题。
  • 这值得另一篇文章,但这是我将如何处理大型处理。做惰性读取,处理每一行(并丢弃它),将处理过的数据存储在pickle文件中。最后编写分布式(可能使用 dispy)作业来处理泡菜文件。这将以低成本将基于内存的分布式处理转换为基于文件的分布式处理。
  • @SwapnilB。 ... IIRC 这里有许多关于处理大型(csv)文件的问答。
【解决方案2】:

考虑到您的文件只有一列,csv 模块可能是多余的。

这是一个版本,它首先从文件中读取所有行并重新打开文件以写入文件中不存在的 url:

lines = open('urls_list.csv', 'r').read()

with open('urls_list.csv', 'a+') as fp:
    for url in urls_list:
        if url in lines:
            print "YEY!"
        else:
            fp.write(url+'\n')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多