2012-06-22 94 views
2

傳統上,閱讀充滿了一個Python陣列中的文件,我用下面的語法使用python讀取.arrays txt文件?

x, y, z = loadtxt("myfile.txt", unpack=True) 

它非常適用於單陣列的文件。

現在,我有一個更復雜的文件:

1.5 3.5 2.5 1.6 
4 
3 
1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 
1 2 
3 4 
5 6 

我想要做的是以後的事:

1.5 3.5 2.5 1.6 - >我想將它們放在三個變量+ 1的陣列標量

4 - > A = 4,我的第一陣列的行數

3 - > B = 3,麻木我的第二陣列

我與A = 4行第一陣列,我想在5個變量(如命令loadtxt(「」加載,解壓=真)

1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 

我的第一陣列的行ER與B = 3條線,我想在2個變量(如命令loadtxt加載(「」,解包= TRUE)

1 2 
3 4 
5 6 

有什麼技術做這樣的事情蟒蛇?

非常感謝。

+2

這是非常瑣碎的解析任務。你有什麼嘗試? –

+0

我不太瞭解python,所以我不知道如何解析具有幾個數組大小的文件。 – Vincent

+0

我不明白第一行。另外,你如何區分nx1數組和數組長度? – Benjamin

回答

6

您在指定自己的文件格式,這不是很有用。我會如JSON建議使用現有的格式:

的myfile.txt:

{ 
    "a" : [ 
     [1, 2, 3, 4, 5], 
     [6, 7, 8, 9, 10], 
     [11, 12, 13, 14, 15], 
     [16, 17, 18, 19, 20] 
    ], 
    "b" : [ 
    ... 
    ] 
} 

read.py

import json 
myfile = open("myfile.txt") 
myVars = json.load(myfile) 
myfile.close() 
myVars['a'] 
3

你可以在Python打開一個文件,像這樣:

f = open("myfile.txt") 

現在你可以通過所有的線條和每行可以用空格分開它:

for line in f.readlines(): 
    linearray = line.split(' ') 
    arraylength = len(linearray) 
    print("Array length: "+str(arraylength)) 

剩下的就是由你決定。

+0

只要文件中的行保證每個數字之間只有一個空格,我就喜歡這種方法。例如'len(「1-2-3」)。split(' - ')'= 3,而len(「1--2--3」)。split(' - ')'= 5。可能希望先將您從文件中讀取的行間隔一格。 編輯: 我嘗試在我的評論中使用空格,但它沒有正確格式化。雖然,與破折號相同的想法。 – Valdogg21

+3

你不需要使用'.split('')',只需'.split()' –

+2

(1)'open(「myfile.txt」)作爲f:'是一個更好的習慣; (2)'f:'中的行與'調用'一樣好。readlines()'並且具有更好的內存屬性; (3)'linearray = line.split()'將處理多個空格和製表符。 – DSM