[英]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.