【问题标题】:Python3: search csv file for string and return row and columnPython3:在 csv 文件中搜索字符串并返回行和列
【发布时间】:2015-07-23 08:40:16
【问题描述】:

我有一个大的 csv 文件,我正在尝试在其中搜索一个字符串。并返回行和列。 到目前为止,我输入的任何代码都会返回“nope”。

我目前的代码:

def search_cell(string):
    with open('aanmaningen.chr', 'r') as f:
        reader = csv.reader(f)
        for row in reader:
            if string in row:
                print(row[0])
                return row[0]
            else:
                print('nope')
                return 'nope'

例如:

当 csv 文件在第 20 行第 9 列中包含字符串“vve”时,我希望能够输入字符串“vve”并取回行号和列号。

注意:因为我使用的程序导出数据的方式,它保存为字符分隔文件(.chr),使用分隔符和分隔符';'本质上是一个带有非标准分隔符和分隔符的 .csv 文件

【问题讨论】:

  • 您能否提供示例输入和预期输出?
  • 字符分隔文件是什么意思?你能举个例子吗?
  • 你在哪里告诉 csv.reader 你的分隔符是分号?

标签: python csv


【解决方案1】:

既然你说——

我有一个大的 csv 文件,我正在尝试在其中搜索一个字符串。并返回行和列。

这让我相信预期的字符串可以在特定列内(作为子字符串)。如果是这样,那么你的做法是错误的。

当你这样做时 -

for row in reader:

row 是该特定行中所有列的列表。那么当你这样做时 -

if string in row:

它检查string 是否完全等于该行中的任何列。而是遍历行的列并检查string 是否在任何列中,并将行号和列号作为元组返回。使用enumerate 函数获取索引以及该索引的值。

另外,你在第一行本身返回nope,如果在那里找不到字符串,你应该只在完整的for循环结束后返回nope,在这种情况下你没有找到任何匹配。

例子-

def search_cell(string):
    with open('aanmaningen.chr', 'r') as f:
        reader = csv.reader(f)
        for i, row in enumerate(reader):
            for j, column in enumerate(row):
                if string in column:
                    print((i,j))
                    return (i,j)
    print('nope')
    return 'nope'

这将返回第一次找到 string 的 0 索引行和列号,如果未找到,则返回 nope

【讨论】:

  • 谢谢,成功了!但是,您错过了 if 语句的缩进。
  • 我的代码有问题,当我搜索时,我得到一个 x 和 y,如果我再次运行程序并输入一个不存在的字符串,它会返回结果上次我确实得到了正确的结果。
  • 我添加了一个 print('nope') ,检查它是否被打印出来。
  • 没关系,我犯了一个与你的代码无关的愚蠢错误;)
猜你喜欢
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2014-02-12
  • 1970-01-01
  • 2020-11-28
  • 2020-08-20
  • 1970-01-01
相关资源
最近更新 更多