簡體   English   中英

Python - 從文件中讀入先前的“list”變量

[英]Python - read in a previously 'list' variable from file

我之前創建了一個list並將其保存到文件'mylist.txt'。 但是,當我讀它時,它是一個字符串,這意味着我不能像我喜歡的那樣訪問每個元素。 我一直在努力尋找解決這個問題的方法,但無濟於事。

在文本文檔中,列表是一行,看起來像:

[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))]

所以如果這個列表等於mylist ,我就可以做到

>>> print mylist[0]
(['000', '001', '002'], ('010', '011', '012'))
>>> print mylist[0][0]
['000', '001', '002']
>>> print mylist[0][0][2]
002

等等

以上內容對我很有用,但在列表中閱讀會產生以下影響:

>>>myreadlist=open("mylist.txt",'r').read()
>>>myreadlist
"[(['000', '001', '002'], ('010', '011', '012')), (['100', '101', '102'], ('110', '111', '112'))]"
>>>myreadlist[0]
'['
>>>print myreadlist[0]
[
>>>myreadlist[:15]
"[(['000', '001'"

我知道mylist的格式很糟糕,但它適用於我想要的東西,並且生成它需要很長時間。 我嘗試將列表復制粘貼到python,如mylist = <paste> ,但列表太長,我得到內存錯誤。

有沒有辦法讀取文件並將其用作list以便我可以像正常一樣訪問每個元素(即如上面的第一個打印語句中所示)?

非常感謝

將字符串傳遞給ast.literal_eval 它會安全地將字符串解析為適當的結構:

>>> import ast
>>> with open("file.txt", 'r') as f:
        data = ast.literal_eval(f.read())
>>> # You're done!

它必須是您應用中的純文本文件嗎? 假設您將其正確格式化為Python列表,您可以將其轉換為Python代碼而不是文本。 重命名文件mylist.py並在列表的前面添加一個類似mylist = [xxx]的賦值。

在需要訪問此列表的Python腳本中,您可以from .mylist import mylist導入它from .mylist import mylist這將允許您執行您的工作(例如mylist[0]等)。

上面的導入假設mylist.py和你的Python腳本在同一個模塊中(同一個目錄里面有一個__init__.py文件)。 如果您不清楚(查看Python模塊 ),只需將整個列表復制到與腳本相同的文件中,然后將賦值放在同一文件的頂部。

暫無
暫無

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

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