Python3:搜索csv文件以获取字符串并返回行和列

时间:2015-07-23 08:40:16

标签: python csv

我有一个大的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文件

1 个答案:

答案 0 :(得分: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