我正在嘗試從檔案中撰寫串列并將它們定義為在字典中分隔值。文本檔案看起來像這樣:
[12, 13, 14]
[87, 45, 32]
...
然后字典看起來像這樣:
{"score_set0": [12, 13, 14], "score_set1": [87, 45, 32]...}
這是我到目前為止得到的代碼,但它只回傳一個空字典
def readScoresFile(fileAddr):
dic = {}
i = 0
with open(fileAddr, "r") as f:
x = len(f.readlines())
for line in f:
dic["score_set{}".format(x[i])] = line
i = 1
return dic
我只在 10 年級的 GCSE 級別(如果有幫助的話,英國 OCR 教學大綱)編程。感謝任何人都可以提供的任何幫助
我也試圖在沒有泡菜模塊的情況下做到這一點
uj5u.com熱心網友回復:
x = len(f.readlines())
消耗了你的整個檔案,所以你的后續回圈f
是迭代一個用盡的檔案句柄,看不到剩余的行,并立即存在。
零需要在這里預先檢查長度(并且您唯一的用途x
是嘗試對其進行索引,這沒有任何意義;您避免 aTypeError
僅僅是因為回圈從未運行過),所以只需省略它并使用它enumerate
來獲取數字當你去時:
def readScoresFile(fileAddr):
dic = {}
with open(fileAddr, "r") as f:
for i, line in enumerate(f): # Let enumerate manage the numbering for you
dic["score_set{}".format(i)] = line # If you're on 3.6 , dic[f'score_set{i}'] = line is nicer
return dic
請注意,這實際上并沒有將輸入行轉換為list
s of int
(您的原始代碼也沒有)。如果你想這樣做,你可以改變:
dic[f'score_set{i}'] = line
到:
dic[f'score_set{i}'] = ast.literal_eval(line) # Add import ast to top of file
將該行解釋為 Python 文字,或者:
dic[f'score_set{i}'] = json.loads(line) # Add import json to top of file
將每一行解釋為 JSON(速度更快,但支持的 Python 型別更少,并且一些合法的 Python 文字不是合法的 JSON)。
通常,您基本上永遠不想使用.readlines()
; 簡單地遍歷檔案句柄將使您的行生效并避免與檔案大小成比例的記憶體需求。(坦率地說,如果他們在 Py3 中擺脫了它,我會更喜歡,因為list(f)
如果你真的需要它會得到相同的結果,并且它不會創建一個可見的方法來鼓勵你做“錯誤的事情”所以經常)。
通過逐行操作,您最終會存盤所有資料,但這比將決議后的資料存盤在 中,dict
并將其來自的所有字串資料存盤在list
.
uj5u.com熱心網友回復:
如果您試圖將這些行轉換為實際的 Python 串列,我建議使用該json
模塊。(另一個選項是ast.literal_eval
,因為在這種情況下語法恰好是相同的。)
import json
def read_scores_file(file_path):
with open(file_path) as f:
return {
f"score_set{i}": json.loads(line)
for i, line in enumerate(f)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/470715.html