我已經閱讀了關於如何將文件傳遞到列表的一些問題,但是這個文件有點棘手,因爲它中有不同的數據類型,所有這些文件都表示爲字符串,文件。Python - 將文件格式化爲列表
我已經成功地得到看起來像這樣的文件:
['verb', 0, 5, 7]['noun', 9, 3, 4]
我怎樣才能把它變成,看起來像列表:
list = [['verb', 0, 5, 7], ['noun', 9, 3, 4]]
其中'verb'
和'noun'
是字符串,所有數字都是整數。
我已經閱讀了關於如何將文件傳遞到列表的一些問題,但是這個文件有點棘手,因爲它中有不同的數據類型,所有這些文件都表示爲字符串,文件。Python - 將文件格式化爲列表
我已經成功地得到看起來像這樣的文件:
['verb', 0, 5, 7]['noun', 9, 3, 4]
我怎樣才能把它變成,看起來像列表:
list = [['verb', 0, 5, 7], ['noun', 9, 3, 4]]
其中'verb'
和'noun'
是字符串,所有數字都是整數。
你可以試試這個:
data = open('file.txt').read().strip('\n')
import re
lists = re.findall("\[(.*?)\]", data)
final_list = [[int(i) if i.isdigit() else i[1:-1] for i in b.split(", ")] for b in lists]
您可以使用regex
執行此任務。下面你可以找到如何應用該技術在這裏草圖:
import re
s = "['verb', 0, 5, 7]['noun', 9, 3, 4]"
#create the regex expression
pattern = re.compile(r'\[(.*?)\]')
#store the data here
result = []
#get every item entry using the regex expression
for x in re.findall(pattern, s):
z = x.split(",")
#parse the data entries
result.append([z[0].replace("'", ""), int(z[1]), int(z[2]), int(z[3])])
result
>>>[['verb', 0, 5, 7], ['noun', 9, 3, 4]]
如果你的意思是,文件由方括號中的組中,所有在同一行,則可能是最好的辦法是更換所有][
通過],[
序列的序列,使您的數據變爲有效JSON,然後用json.loads
分析它:
import json
with open('myfile', 'r') as f:
line = f.readline().rstrip()
list_of_lists = json.loads("[" + line.replace('][', '],[').replace("'", '"') + "]")
我會打開文件,然後讀取它,存儲在一個字符串中,並用「],」替換所有「]」。然後,我會eval
(是的,我知道它是邪惡的,但...),並將其轉換爲列表。
with open('your_file.txt', 'r') as raw_file:
your_str = raw_file.read()
your_str = your_str.replace('][', '],[')
your_list = list(eval(your_str))
如果知道該文件的內容將是JSON,您可以使用json.loads
而不是eval
。在上面給出的示例中,您應該將'
轉換爲"
以便成爲有效的JSON。
按照此步驟:
_「我設法得到一個看起來像這樣的文件」_。你的意思是說你的原始文件看起來不像這樣,我們在這裏看到的結果是你先對數據進行某種操縱之後的結果?我們是否也可以看到原始文件?轉換原始數據可能更容易,而不是從操縱的數據開始。 – Kevin
你想看看[問]和[mcve] – pvg