使用Python3在文件中搜索字符串,将下一行的结果添加到数组中,然后在下一个字符串处停止

戴维斯

我正在使用Python 3处理结果文件。文件的结构是字符串标识符的组合,后跟此格式的整数值列表:

ENERGY_BOUNDS 
  1.964033E+07  1.733253E+07  1.491825E+07  1.384031E+07  1.161834E+07  1.000000E+07  8.187308E+06  6.703200E+06
  6.065307E+06  5.488116E+06  4.493290E+06  3.678794E+06  3.011942E+06  2.465970E+06  2.231302E+06  2.018965E+06
EIGENVALUE 
  1.219034E+00

该文件中可能有50套具有唯一标识符的不同数据集。我想做的是编写一个代码,该代码将搜索特定的标识符(例如ENERGY_BOUNDS),然后将其后的值读入列表,并在下一个标识符(在本例中为EIGENVALUE)停止。然后,我需要能够操作该列表(找到其长度,打印其值等)。

我将其编写为一个函数,因此当我要搜索不同的标识符时,可以在代码中多次调用它。到目前为止,我所拥有的是:

def read_data_from_file(file_name, identifier):

    list_of_results = [] # Create list_of_results to put results in for future manipulation
    
    # Open the file in read only mode
    with open(file_name, 'r') as read_obj:

        # Read all lines in the file one by one
        for line in read_obj:

            # For each line, check if line contains the string
            if identifier in line:

                # If yes, read the next line
                nextValue = next(line)
                list_of_results.append(nextValue.rstrip())

    return list_of_results

它可以正常工作,直到读取标识符之后的下一行为止,而我将继续研究如何继续读取该行之后的结果以及如何使其停在下一个标识符处。

user_3pij

以下是简单且经过测试的答案。

你犯了两个错误

  1. line是一个字符串而不是迭代器,这样做next(line)会导致错误。
  2. 找到标识符后,您只需要阅读一行,而您需要继续阅读直到出现另一个标识符。

以下是对代码进行少量修改后的代码。还对您的数据进行了测试

def read_data_from_file(file_name, identifier):
    with open(file_name, 'r') as read_obj:
        list_of_results = []
            # Read all lines in the file one by one
        for line in read_obj:

            # For each line, check if line contains the string
            if identifier in line:
                # If yes, read the next line
                nextValue = next(read_obj)
                while(not nextValue.strip().isalpha()): #keep on reading untill next identifier appears
                    
                    list_of_results.extend(nextValue.split())
                    nextValue = next(read_obj)
        print(list_of_results)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将下一行中的另一个字符串添加到MacOS sed上的特定字符串?

Python:如何搜索一个字符串并在下一个不同的字符串重复出现时打印

Java:字符串中的下一个字符

检查字符串中的下一个字符

使用 Javascript 搜索字符串并返回下一个字符串

如何使用++运算符访问字符串的字符数组中的下一个字符串?

如何计算将在Python中打印的下一个字符串的长度?

如何将下一个字符串分成几组?

在 R 中的一个点之后剪下一个字符串

在 python3 中使用 re 打印匹配的模式及其下一个字符串

在python中分割字符串,然后将它们加入,以便每个字符串比下一个字符串长一个子字符串

是否可以分配一个字符串,但也可以从一行中返回的元组添加到一个整数?

Ruby方法,它接受一个字符串并返回一个重复的数组,每个重复中的字符串中的下一个字母大写(如wave)

字符串捕获并打印下一个字符。

切片字符串直到下一个字符

如何在字符串中找到一个字符并替换它和python中的以下一个

如何跳过/跳过VSCode中的下一个字符串实例选择?

bash +如何转换到列表中的下一个字符串

Javascript-将字符串从特定字符拼接到下一个字符

在文件的每一行中添加一个字符串,每个文件中添加的字符串增加1

遇到大写 M,重复前一个字符(然后删除 M),遇到大写 N 从字符串中删除下一个字符

如果只有前一个或下一个字符不包含相同字符,则从字符串中替换字符

VB.net中流的下一个字符串

我需要大写下一个字符串CSS

如何在字符串中查找下一个字符,只是要知道该字符是否存在于python中的前一个字符之后

PowerShell 脚本,用于在 .txt 中搜索字符串,如果找到,则查找包含另一个字符串的下一行并对其进行处理

无论标点如何,如何只选择目标字符串之后的下一个字符串但目标字符串之后的下一个字符串?

Python切片一个字符串并添加到列表中

将文本文件中的每一行缩短59个字符,然后在其位置添加一个新的较短的字符串