簡體   English   中英

python從列表中選擇項目

[英]python select item from list

我在從游戲中保存的.txt文件中包含以下內容。 我需要重新運行游戲,在適當的地方插入項目。

(' A', '1', '2', '+1.25', '+0', '4', (123,321))
(' B', '1', '2', '-0', '+0.25', 'V', (05,245))
(' 1', '0', '6', '+0', '-0.25', 'V', (10,250))
(' 2', '0', '6', '-0.5', '-1.75', '4', (190,8))
(' 3', '2', '4', '-1', '1', '3', (180,100))

用於恢復物品的代碼是:-

Z=[None]*10
i=0
TT = 'TestZZ.txt'
with open (TT, 'r') as f:
    array=[]
    for line in f:
        Z[i] = line
        i = i+1

Z [1]的恢復列表為“(('B','1','2','-0','+ 0.25','V',(05,245))\\ n”

如果我執行Z [1] [3],我需要將每個項目都作為num的字符串來獲取,我得到的是'B'而不是-0

請幫助

一個更簡單有效的解決方案可能是

// Say Z[1] is "(' B', '1', '2', '-0', '+0.25', 'V', (05,245))\n"
import ast
print ast.literal_eval(Z[1]) 
// this should return (' B', '1', '2', '-0', '+0.25', 'V', (5, 245))

希望這可以幫助 :)

Z[1]的內容是字符串 "(' B', '1', '2', '-0', '+0.25', 'V', (05,245))" ,而不是您期望的列表...並且:

Z[1][0] = '('
Z[1][1] = "'"
Z[1][2] = ' '
Z[1][3] = 'B'

因此結果是正確的,簡化的數據解析器將是:

>>> data = "(' B', '1', '2', '-0', '+0.25', 'V', (05,245))"
>>> data.split(',')
["(' B'", " '1'", " '2'", " '-0'", " '+0.25'", " 'V'", ' (05', '245))']
>>> data.split(',')[2]
" '2'"
>>> data.split(',')[2].strip(', ')
"'2'"
>>> data.split(',')[2].strip("' ")
'2'
>>>

但是它不能處理諸如' B, A'' B, A'字符串' B, A'因此您可能需要編寫更強大的解析器。 或者,您可以使用例如XML數據格式或使用pickle

我發現使用Pickle的方法可能不是最好的方法,但它似乎有效。

import pickle
T=[None]*10
R=[None]*10
T[0]=('bs:','300:','test3.txt ','5:FR456')
T[1]=('Bisley', '400', '4', 'Fred', 'CD45')
T[2]=(' A', '1', '2', '+1.25', '+0', '4')
T[3]=(' B', '1', '2', '-0', '+0.25', 'V')
T[4]=(' 1', '0', '6', '+0', '-0.25', 'V')
T[5]=(' 2', '0', '6', '-0.5', '-1.75', '4')



output = open("save1.pkl", 'wb')
for i in range(0,10):


    pickle.dump(T[i], output)


output.close()

inputFile = open("save1.pkl", 'rb')

對於范圍在(0,10)中的i:R [i] = pickle.load(inputFile)

適用於范圍(0,10)中的i的inputFile.close():打印R [i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM