Python 在第行(字符串)中找到子字符串后打印下一行,直到满足条件

Python 在第行(字符串)中找到子字符串后打印下一行,直到满足条件,python,python-3.x,Python,Python 3.x,我想: 从文件中读取行 查找具有指定文本的行所需的读数 如果在行首包含星号*,则在具有特定文本的行后打印下一行 如果下一行中没有带星号*的行或其他行,则必须停止 到目前为止,我所做的是读取文件,获取行并查找特定的文本,在本例中,这是必读的 这将打印出下一行,但仅此而已。我需要的是打印出接下来的所有行,如果它们在行首包含星号*。否则,应停止打印行 我想了一会儿,但不知道怎么办 这是它在原始文件中的外观: ## Required reading * [5.5. Dictionaries](https

我想:

从文件中读取行 查找具有指定文本的行所需的读数 如果在行首包含星号*,则在具有特定文本的行后打印下一行 如果下一行中没有带星号*的行或其他行,则必须停止 到目前为止,我所做的是读取文件,获取行并查找特定的文本,在本例中,这是必读的

这将打印出下一行,但仅此而已。我需要的是打印出接下来的所有行,如果它们在行首包含星号*。否则,应停止打印行

我想了一会儿,但不知道怎么办

这是它在原始文件中的外观:

## Required reading
* [5.5. Dictionaries](https://docs.python.org/3/tutorial/datastructures.html#dictionaries)
* [5.6. Looping Techniques](https://docs.python.org/3/tutorial/datastructures.html#looping-techniques)
* [5.7. More on Conditions](https://docs.python.org/3/tutorial/datastructures.html#more-on-conditions)
* [5.8. Comparing Sequences and Other Types](https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-types)
* [5.4. Sets](https://docs.python.org/3/tutorial/datastructures.html#sets)
* [Set Types — set, frozenset](https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset)
* [7.2. Reading and Writing Files](https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files)
* [7.2.1. Methods of File Objects](https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects)
* [8.4. The try statement](https://docs.python.org/3/reference/compound_stmts.html#the-try-statement)
* [8.5. The with statement](https://docs.python.org/3/reference/compound_stmts.html#the-with-statement)
* [Open](https://docs.python.org/3/library/functions.html#open)
* [file object](https://docs.python.org/3/glossary.html#term-file-object)
但该文件还包含其他部分,不仅是必读部分,我只想从该部分获取带有star*的链接并打印出来。

尝试以下方法:

with open(file, "r") as input:
  is_required = False
  for line in input:
    if is_required and line.startswith("*"):
      print(line)
    else:
      is_required = '## Required reading' in line
最后一行将根据是否包含指定文本的行,将is_required标志设置为True或False。

尝试以下操作:

with open(file, "r") as input:
  is_required = False
  for line in input:
    if is_required and line.startswith("*"):
      print(line)
    else:
      is_required = '## Required reading' in line

最后一行将根据是否包含指定文本的行将is_required标志设置为True或False。

这很聪明,明白了。谢谢你的帮助和时间。真聪明,明白了。谢谢您的帮助和时间。文件大小是多少?因为最好的方法是将文件加载到变量中。然后,您可以使用正则表达式模块re或至少使用更简单的循环+处理字符串。@s3n0我不同意,因为这需要两次过程—一次读取文件,第二次提取信息,而您可以一次完成任务。因此,您认为RAM操作比HDD操作快吗?:是的,当然,现在几乎每个操作系统和语言解释器在从磁盘读取时都使用缓冲区。是的,当然不再使用物理硬盘,只有SSD。但我必须依靠工作中的一切。我是在汇编程序中长大的。对我来说,RAM=以纳秒为单位的访问时间,HDD=以毫秒为单位的访问时间,这仍然是事实。re模块也会出现类似的问题,具体取决于您在何处以及如何使用它。所以我问了数据量的问题。如果是100MB的文件大小,这可能是一个大问题。@s3n0我希望您已经意识到,为了将其存储在RAM中,必须先读取磁盘上的所有内容。您只需将更多的纳秒添加到毫秒中,就可以在毫秒内完成。文件大小是多少?因为最好的方法是将文件加载到变量中。然后,您可以使用正则表达式模块re或至少使用更简单的循环+处理字符串。@s3n0我不同意,因为这需要两次过程—一次读取文件,第二次提取信息,而您可以一次完成任务。因此,您认为RAM操作比HDD操作快吗?:是的,当然,现在几乎每个操作系统和语言解释器在从磁盘读取时都使用缓冲区。是的,当然不再使用物理硬盘,只有SSD。但我必须依靠工作中的一切。我是在汇编程序中长大的。对我来说,RAM=以纳秒为单位的访问时间,HDD=以毫秒为单位的访问时间,这仍然是事实。re模块也会出现类似的问题,具体取决于您在何处以及如何使用它。所以我问了数据量的问题。如果是100MB的文件大小,这可能是一个大问题。@s3n0我希望您已经意识到,为了将其存储在RAM中,必须先读取磁盘上的所有内容。您只需将更多的纳秒添加到毫秒中,就可以在毫秒内完成。