Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,从关键字打印到下一个点_Python_String - Fatal编程技术网

Python,从关键字打印到下一个点

Python,从关键字打印到下一个点,python,string,Python,String,这是我的代码 a = input("Enter file name: ") b = input("Enter keyword: ") def search_string_in_file(file_name, string_to_search): line_number = 0 results = "" with open(file_name, 'r' , encoding='latin1') as read_o

这是我的代码

a = input("Enter file name: ")
b = input("Enter keyword: ")

def search_string_in_file(file_name, string_to_search):
    line_number = 0
    results = ""
    with open(file_name, 'r' , encoding='latin1') as read_obj:
        for line in read_obj:
            line_number += 1
            if string_to_search in line:
                print(line)

search_string_in_file(a, b)
此时,它将打开您在第一次输入中设置的文件,并逐行搜索此文件以查找您在第二次输入中设置的关键字

现在,它将打印找到关键字的整行

我想做的就是从关键字开始打印到下一个点

例如: file.txt

关键字=我的

实际结果打印两行,因为两行都包含“my”。但它只应打印以下内容:

my house.
my girlfriend hates it, but that's ok.

到目前为止还没有找到任何答案,请帮助我您可以简单地使用
str
类的
find
方法,它告诉您找到子字符串的最低索引

我将您的代码修改为如下内容:

a = input("Enter file name: ")
b = input("Enter keyword: ")


def search_string_in_file(file_name, string_to_search):
    line_number = 0
    results = []
    with open(file_name, 'r', encoding='latin1') as read_obj:
        for line in read_obj:
            line_number += 1

            for subline in line.split('.'):
                word_index = subline.find(string_to_search)
                if word_index != -1:
                    results.append(subline[word_index:].strip('\n') + '.')

    return results


print(search_string_in_file(a, b))
现在,它可以准确地处理你想要的

或者,如果txt文件足够大,并且您不想存储行,您可以只打印行而不是将其存储到列表中


顺便说一句,你没有在任何地方使用
行号
变量

我们可以使用操作符
[]
拼接到字符串
。借助
str.find()
,我们可以确定需要打印的小部分。从:

下面是我们重写代码的方法:

a = input("Enter file name: ")
b = input("Enter keyword: ")

def search_string_in_file(file_name, string_to_search):
    line_number = 0
    results = ""
    with open(file_name, 'r' , encoding='latin1') as read_obj:
        for line in read_obj:
            line_number += 1
            word_index = line.find(string_to_search)  # position of first letter of the word
            if (word_index != -1):  # meaning the word was found
                period_index = line.find('.', word_index)  # position of first period after start of word
                print(line[word_index:period_index]

search_string_in_file(a, b)
请记住,如果
字符串\u to\u search
中有一个句点“.”,这将变得不可靠。要确保在本例中打印出整个字符串,请执行以下操作:

period_index = line.find('.', word_index+len(string_to_search))

在查找句点之前,这将跳过整个
string\u to\u search

文本文件非常大,有很多特殊字符,有些不可读。谢谢你的帮助。我没有发现我在任何地方都没有使用line_number var,
a = input("Enter file name: ")
b = input("Enter keyword: ")

def search_string_in_file(file_name, string_to_search):
    line_number = 0
    results = ""
    with open(file_name, 'r' , encoding='latin1') as read_obj:
        for line in read_obj:
            line_number += 1
            word_index = line.find(string_to_search)  # position of first letter of the word
            if (word_index != -1):  # meaning the word was found
                period_index = line.find('.', word_index)  # position of first period after start of word
                print(line[word_index:period_index]

search_string_in_file(a, b)
period_index = line.find('.', word_index+len(string_to_search))