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