【问题标题】:Reading in data from a text file and storing it in an array in python从文本文件中读取数据并将其存储在python中的数组中
【发布时间】:2020-01-17 09:39:33
【问题描述】:

我正在尝试从文本文件中逐行读取数据并将其存储在二维数组中,以便以后可以进一步处理。

每次找到字符串“EOE”时,我都想移动到新行并继续从文本文件中逐行读取条目。

我似乎无法声明二维字符串数组或成功读取值。我是来自 C 的 python 新手,所以我的语法和对 python 的一般理解不是很好。

rf = open('data_small.txt', 'r')
lines = rf.readlines()
rf.close()
i = 0
j = 0

line_array = np.array((200, 200))

for line in lines:
    line=line.strip()
    print(line)
    line_array[i][j] = line
    if line == 'EOE':
        i+=1
    j+=1

rf.close()

line_array

文本文件如下所示:

-----
Entry1=50
Entry2=SomeText
Entry3=Instance.Test.ID=67
EOE
-----
Entry1=Processing
Entry2=50.87.78
Entry3=Instance.Test.ID=91
EOE
-----
Entry1=50
Entry2=SomeText
Entry3=Instance.Test.ID=67
EOE
-----

我希望数组字符串数组看起来像这样,行和列可以转置,但总体思路是一行或一列代表一个 EOE 条目:

array = [
['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67', 'EOE'],
['-----', 'Entry1=Processing', 'Entry2=50.87.78', 'Entry3=Instance.Test.ID=91', 'EOE'],
['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67', 'EOE']
]

【问题讨论】:

    标签: python arrays data-processing


    【解决方案1】:

    这是一种方法。

    例如:

    res = [[]]
    with open(filename) as infile:
        for line in infile:            #Iterate each line
            line = line.strip()        #strip new line
            if line == 'EOE':          #check for `EOE`
                res.append([])         #Add new sub-list
            else:
                res[-1].append(line)   #Append content to previous sub-list
    
    print(res)
    

    输出:

    [['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67'],
     ['-----',
      'Entry1=Processing',
      'Entry2=50.87.78',
      'Entry3=Instance.Test.ID=91'],
     ['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67'],
     ['-----']]
    

    【讨论】:

      【解决方案2】:

      这是一种“pythonic”方法:

      >>> with open('data_small.txt') as input_file:
      >>>    contents = input_file.read()
      
      >>> contents
      
      '-----\nEntry1=50\nEntry2=SomeText\nEntry3=Instance.Test.ID=67\nEOE\n-----\nEntry1=Processing\nEntry2=50.87.78\nEntry3=Instance.Test.ID=91\nEOE\n-----\nEntry1=50\nEntry2=SomeText\nEntry3=Instance.Test.ID=67\nEOE\n-----'
      
      

      第一步是通过\nEOE\n分割:

      >>> contents = contents.split('\nEOE\n')
      >>> contents
      
      ['-----\nEntry1=50\nEntry2=SomeText\nEntry3=Instance.Test.ID=67',
       '-----\nEntry1=Processing\nEntry2=50.87.78\nEntry3=Instance.Test.ID=91',
       '-----\nEntry1=50\nEntry2=SomeText\nEntry3=Instance.Test.ID=67',
       '-----']
      
      

      接下来是用\n分割列表中的每个元素:

      >>> contents = [content.split('\n') for content in contents]
      >>> contents
      
      [['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67'],
       ['-----',
        'Entry1=Processing',
        'Entry2=50.87.78',
        'Entry3=Instance.Test.ID=91'],
       ['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67'],
       ['-----']]
      
      

      这将为您提供所需的输出。如果您不想要最后一个元素,请执行以下操作:

      >>> contents = contents[:-1]
      >>> contents
      
      [['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67'],
       ['-----',
        'Entry1=Processing',
        'Entry2=50.87.78',
        'Entry3=Instance.Test.ID=91'],
       ['-----', 'Entry1=50', 'Entry2=SomeText', 'Entry3=Instance.Test.ID=67']]
      
      

      PS:确保您只使用with 语句打开和读取文件,然后在with 语句之外进行计算。

      【讨论】:

        猜你喜欢
        • 2020-02-09
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        • 2015-04-16
        • 1970-01-01
        • 2018-05-30
        • 2013-11-19
        • 1970-01-01
        相关资源
        最近更新 更多