2012-04-15 75 views
0

我有麻煩解析包含這樣行的TXT文件:跳躍列表的n_th元素分析Python中的txt文件

50.0 0.1 [0.03, 0.05, 0.067, 1.003, ...] 
50.0 0.134 [0.3465, 0.5476, 1.0, ....] 
. 
. 
. 

我並不需要每一行的開始,只有名單!列表中的元素確實是而不是包含相同數量的字符,並且它們由空格和逗號分隔。

我想要做的是忽略每個列表前面的任何內容,並跳轉到(例如)列表的第9個元素,讀取值並保存。然後轉到下一行並執行相同的操作。

我的方法:

找到一種方法來解析TXT線,作爲一個列表,而不是作爲一個字符串,這樣我就可以處理列表中的元素。

管理跳轉到第9個值列表,然後讀到的一切,直到下一個值(10在這種情況下)。

任何想法如何做到這一點?

+0

還沒有,但我現在將要做到這一點;) – chrizz 2012-04-15 17:04:21

回答

1

當你有這種形式的每一行:

line = '50.0 0.1 [0.03, 0.05, 0.067, 1.003]\n' 

首先去除串的不必要的部分。找到'['和']'並使用切片。

line[line.index('[')+1:line.index(']')] 

用分隔符(now:',')分隔剩餘的字符串。你會得到一個字符串列表。

line[line.index('[')+1:line.index(']')].split(',') 

取第n個元素並用float()或eval()將其轉換。

float(line[line.index('[')+1:line.index(']')].split(',')[3]) 

如果您需要列表中的更多元素,則使用'['和']'評估字符串,您將得到一個列表。 (注:的eval()是緩慢的。)

eval('[0.03, 0.05, 0.067, 1.003]') 

代碼將與此類似:

with open('datas.txt') as f: 
    n = 8 
    for line in f: 
     a = float(line[line.index('[')+1:line.index(']')].split(',')[n]) 
     do_something_with(a) 
+0

正是我所需要的!謝謝 :) – chrizz 2012-04-16 13:14:01

0

至於你的問題沒有得到很好的形成,我會盡量在更廣泛的方式

  1. Read the file linearly.
  2. 回答如果您的數據的格式是統一的,即 一個。方括號在開始和結束。 b。數字之間用空格分開

    使用條刪除任何尾隨空格和或換行 將其切片以刪除第一個和最後一個字符ex。

    instr="[0.03 0.05 0.067 1.003]"[1:-1]

    使用split()字符串拆分號碼列表。

  3. 索引列表訪問第九元素
  4. 保存或做,如果你需要讀取一個文件,並提取每一行的第9個元素,你需要你想這樣做
+0

對不起,我誤導你。 ..這不僅僅是列表,每一行都有一個開始(我不需要)。我更新了我的問題! – chrizz 2012-04-15 17:24:14

0

什麼都計算做這樣的事情:

with open('your_file.txt') as in_file: 

    my_list = [line.split()[9] for line in in_file] 
+0

我的問題改變了一下,現在我在每行的開頭有兩個數字。任何想法如何去除每一行,所以我只是列表? thx – chrizz 2012-04-15 17:30:27

0

假設文本文件結構是完全一樣的發佈。

def openFile(file): 
    "Usage: list = openFile(filename)" 
    try: 
     linesList = [] 
     inputFile = open(file, "r") 
     tempList = inputFile.readlines() 
     inputFile.close() 
     for line in tempList: 
      linesList.append(line.replace("[","").replace("]","").split()) 
     return linesList 
    except: 
     print("Could not open file!") 

def saveFile(file, data, element): 
    "Usage: saveFile('text.txt',myList,9)" 
    outputFile = open(file, "w") 
    for line in data: 
     outputFile.write(line[element-1] + "\n") 
    outputFile.close() 



def main(): 
    myList = openFile("text.txt") 
    #now you have a list of lists :D 
    #you can do what ever you want with the data 
    print(myList) 
    saveFile("text2.txt",myList,2) 

main() 
0

要刪除一行中的字符到列表的起始位置,一種方法是獲取以開頭括號字符開頭的行的一部分。這將如下所示:

line = line[line.index('['):] 

您可以使用拆分()或eval()函數將其轉換成一個列表,並檢索從該點的元素,然後處理字符串。

line = line[line.index('['):].split()[9] 
+0

聽起來像是一個很好的解決方案,它幾乎可以工作,只剩下一個小問題:如果我按照你的建議去做,我仍然有一個元素末尾的逗號!我如何擺脫逗號? – chrizz 2012-04-16 06:35:52