繁体   English   中英

从文本文件中读取数据并将其存储在 python 中的数组中

[英]Reading in data from a text file and storing it in an array in python

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

每次找到字符串“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']
]

这是一种方法。

前任:

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'],
 ['-----']]

这是一种“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语句之外进行计算。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM