我有一個包含 4 行的檔案“test.txt”,如下所示:
[35,51,3701],[10,6,7700.75],[42,31,4700.5],[31,41,1700.25],[6,25,3901.25],[10,12,3301.5]
[4,13,3709.25],[13,24,3761.5]
[11,18,3101.25],[26,7,3671],[10,69,7800.75]
[5,5,3701.25]
我將手動以第一行為例。這是我想做的:
arr = np.array([[35,51,3701],[10,6,7700.75],[42,31,4700.5],[31,41,1700.25],[6,25,3901.25],[10,12,3301.5]])
p, b, a = [], [], []
for i in range(0, len(arr)):
b = b [arr[i][0]]
a = a [arr[i][1]]
p = p [arr[i][2]]
print (p)
print (b)
print (a)
結果是(這正是我想要的):
[3701.0, 7700.75, 4700.5, 1700.25, 3901.25, 3301.5]
[35.0, 10.0, 42.0, 31.0, 6.0, 10.0]
[51.0, 6.0, 31.0, 41.0, 25.0, 12.0]
但是,當我嘗試逐行讀取檔案時,它不起作用。這是我使用的代碼:
f = open('test.txt')
for line in f:
print(line)
arr = np.array([line.rstrip()])
p, b, a = [], [], []
for i in range(0, len(arr)):
b = b [arr[i][0]]
a = a [arr[i][1]]
p = p [arr[i][2]]
print (p)
print (b)
print (a)
print ("\n\n")
和結果(不是預期的):
[35,51,3701],[10,6,7700.75],[42,31,4700.5],[31,41,1700.25],[6,25,3901.25],[10,12,3301.5]
['5']
['[']
['3']
[4,13,3709.25],[13,24,3761.5]
[',']
['[']
['4']
[11,18,3101.25],[26,7,3671],[10,69,7800.75]
['1']
['[']
['1']
[5,5,3701.25]
[',']
['[']
['5']
您能告訴我如何獲得手動示例中的結果嗎?謝謝
uj5u.com熱心網友回復:
問題是在行arr = np.array([line.rstrip()])。回傳字串,而line.rstrip()不是數值。您可以使用ast.literal_eval它來決議它,例如:
from ast import literal_eval
f = open("a.txt", "r")
for line in f:
print(line)
arr = np.array(literal_eval(line.rstrip() ","))
p, b, a = [], [], []
for i in range(len(arr)):
b = b [arr[i][0]]
a = a [arr[i][1]]
p = p [arr[i][2]]
print(p)
print(b)
print(a)
print("\n\n")
印刷:
[35,51,3701],[10,6,7700.75],[42,31,4700.5],[31,41,1700.25],[6,25,3901.25],[10,12,3301.5]
[3701.0, 7700.75, 4700.5, 1700.25, 3901.25, 3301.5]
[35.0, 10.0, 42.0, 31.0, 6.0, 10.0]
[51.0, 6.0, 31.0, 41.0, 25.0, 12.0]
[4,13,3709.25],[13,24,3761.5]
[3709.25, 3761.5]
[4.0, 13.0]
[13.0, 24.0]
[11,18,3101.25],[26,7,3671],[10,69,7800.75]
[3101.25, 3671.0, 7800.75]
[11.0, 26.0, 10.0]
[18.0, 7.0, 69.0]
[5,5,3701.25]
[3701.25]
[5.0]
[5.0]
uj5u.com熱心網友回復:
IIUC,您可以嘗試使用ast.literal_eval:
from ast import literal_eval
for line in f: # use your file here
a = np.array(literal_eval(f'[{line}]'))
p,b,a = a.T.tolist()
print(p)
print(b)
print(a)
print('---')
或者,如果您不想使用numpy,請使用:
p,b,a = zip(*literal_eval(f'[{line}]'))
輸出:
[35.0, 10.0, 42.0, 31.0, 6.0, 10.0]
[51.0, 6.0, 31.0, 41.0, 25.0, 12.0]
[3701.0, 7700.75, 4700.5, 1700.25, 3901.25, 3301.5]
---
[4.0, 13.0]
[13.0, 24.0]
[3709.25, 3761.5]
---
[11.0, 26.0, 10.0]
[18.0, 7.0, 69.0]
[3101.25, 3671.0, 7800.75]
---
[5.0]
[5.0]
[3701.25]
---
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460082.html
上一篇:Python多處理空陣列
