2017-09-11 144 views
-1

我已經閱讀了關於如何將文件傳遞到列表的一些問題,但是這個文件有點棘手,因爲它中有不同的數據類型,所有這些文件都表示爲字符串,文件。Python - 將文件格式化爲列表

我已經成功地得到看起來像這樣的文件:

['verb', 0, 5, 7]['noun', 9, 3, 4]

我怎樣才能把它變成,看起來像列表:

list = [['verb', 0, 5, 7], ['noun', 9, 3, 4]]

其中'verb''noun'是字符串,所有數字都是整數。

+2

_「我設法得到一個看起來像這樣的文件」_。你的意思是說你的原始文件看起來不像這樣,我們在這裏看到的結果是你先對數據進行某種操縱之後的結果?我們是否也可以看到原始文件?轉換原始數據可能更容易,而不是從操縱的數據開始。 – Kevin

+1

你想看看[問]和[mcve] – pvg

回答

1

你可以試試這個:

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] 
0

您可以使用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]] 
1

如果你的意思是,文件由方括號中的組中,所有在同一行,則可能是最好的辦法是更換所有][通過],[序列的序列,使您的數據變爲有效JSON,然後用json.loads分析它:

import json 
with open('myfile', 'r') as f: 
    line = f.readline().rstrip() 
list_of_lists = json.loads("[" + line.replace('][', '],[').replace("'", '"') + "]") 
0

我會打開文件,然後讀取它,存儲在一個字符串中,並用「],」替換所有「]」。然後,我會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。

0

按照此步驟:

  • 在這個無格式確定誰是存儲數據
  • 稱他們爲
  • Talk與這個人有關的利益將數據存儲在一個標準格式。它們是一些可用的格式:csv,json,xml。
  • 詢問他們如何接收這種格式的數據。
  • 在一行代碼庫實用程序中反序列化來自文件的數據。像`json.load('your_file.txt')