如何在文本文件中搜索某个字符并说出其所在的行和列

时间:2018-08-30 08:20:59

标签: python python-3.x csv

def find_csv(filename, keyvalue):
    with open(filename, "r") as csv_file:
        file_name = csv_file
        keyvalue = input("please enter what you would like to find in the file: ")
        file = file_name.read()
        file = file.strip(",")



xxx = input("please enter the file: ")
print(find_csv(xxx, ""))

2 个答案:

答案 0 :(得分:1)

假设我们有一个非常简单的csv(simple.csv):

bla,blub,bleb
helo,hallo,bye
wow,wuw,wiw

我修改了您的代码以使用标准的python csv库:

import csv

def find_csv(filename, keyvalue):
    with open(filename, "r", newline='') as csv_file:
        csv_reader = csv.reader(csv_file)
        for row_idx, row in enumerate(csv_reader):
            for col_idx, col in enumerate(row):
                if keyvalue in col:
                    return row_idx, col_idx


print(find_csv("simple.csv", "wuw"))

此代码段的结果是:(2, 1)(索引从0开始,但是如果愿意,您可以简单地加1)。

为了简化示例,我没有执行任何异常处理。请不要按原样使用;)

我希望这会有所帮助。如果没有,请告诉我。

答案 1 :(得分:0)

您的示例发生了种种混乱。您已经使用了一些非常高级的构造,例如with。当您开始学习编程时,我肯定会尝试使用婴儿步骤。这是一些可以满足您需求的代码:

def find_csv(filename, string_to_find):
    with open(filename, "r") as csv_file:
        line = 0
        for text in csv_file.readlines():    
            line += 1
            char = text.find(string_to_find)
            if char >= 0:
                return 'string found at line %s, character %s'%(line, char)
    return "string not found"

file_to_look_in = "temp.py"
print(find_csv(file_to_look_in, "find_csv"))

在您的代码中,您有键值作为输入输入,但从不使用它。相反,您要求在函数内部输入。这是不好的做法。您还可以将csv_file重新分配给file_name,这是不必要的。另外,“ file_name”接近“ filename”,并且可能引起混乱。我什至会质疑函数的名称,因为该名称暗示您正在找到一个csv文件,而不是在csv文件中找不到任何东西。由于此功能可以在任何文件中找到某些内容,因此我将使名称更通用。您可能将其编写为在CSV文件中查找特定值的事实与代码的功能无关。好的命名方式不仅使代码更具可读性,而且使代码更易写,因为它可以在您的头脑中阐明变量所具有的价值。希望对您有帮助。