我自願幫助某人將有限元網格從一種格式轉換爲另一種格式(i-deas * .unv到艾伯塔)。我用NumPy做了一些額外的網格修改,但我在將原始文本文件數據讀入NumPy數組時遇到了問題。我已經嘗試genfromtxt和loadtxt到目前爲止沒有成功。用NumPy讀取大格式的文本文件
一些細節:
1)所有組由頁眉和頁腳標誌在自己的行分隔符「-1」。
2)NODE組在它自己的行上有一個標題「2411」。我只想讀這組中的交替行,用4個整數跳過每行,但是用3個Fortran雙精度數讀取行。
3)ELEMENT連接組在它自己的行上有一個標題「2412」。所有數據都是整數,只有前4列需要讀取。由於缺少2個和3個節點元素的值,NumPy數組中會有一些空插槽。
4)「2477」節點組我認爲我可以使用正則表達式來處理自己,該正則表達式可以找到要讀取的行。 5)真正的數據文件將有大約100萬行文本,所以我非常希望它在可能的情況下被矢量化(或者任何NumPy可以快速讀取內容)。
對不起,如果我提供了太多的信息,謝謝。
以下各行是* .unv文本文件格式的部分示例。
-1
2411
146303 1 1 11
6.9849462399269246D-001 8.0008842847097805D-002 6.6360238055630028D-001
146304 1 1 11
4.1854795755893875D-001 9.1256034628308313D-001 3.5725496189239300D-002
146305 1 1 11
7.5541258490349616D-001 3.7870257739063029D-001 2.0504544370783115D-001
146306 1 1 11
2.7637569971086767D-001 9.2829777518336010D-001 1.3757239038663285D-001
-1
-1
2412
9 21 1 0 7 2
0 0 0
1 9
10 21 1 0 7 2
0 0 0
9 10
1550 91 6 0 7 3
761 3685 2027
1551 91 6 0 7 3
761 2380 2067
39720 111 1 0 7 4
71854 59536 40323 73014
39721 111 1 0 7 4
45520 48908 133818 145014
-1
-1
2477
1 0 0 0 0 0 0 3022
PERMANENT GROUP1
7 2 0 0 7 3 0 0
7 8 0 0 7 7 0 0
7 147 0 0 7 148 0 0
2 0 0 0 0 0 0 2915
PERMANENT GROUP2
7 1 0 0 7 5 0 0
7 4 0 0 7 6 0 0
7 9 0 0 7 11 0 0
-1
謝謝你的建議。看一下「fromfile」命令,它看起來像從第一行讀取文件,因此不會允許只讀取特定塊。我看着使用「open」命令爲上面的「fp」定義了一個塊,但是這似乎也只是從第一行讀取文件。 – Tim 2013-02-19 12:00:28
我在上面添加了一個簡化的例子。 – 2013-02-19 12:13:54
感謝您的拼寫!我遺漏的一點是,readline()命令的作用是告訴fromfile命令它應該從當前行讀取fp,而不是文件的開頭。有沒有辦法將起始行設置爲某個值,而無需多次調用readline()?我可以通過在一行的開始處搜索字符串「-1」來快速找到數據塊開始和結束處的行號,但必須在循環中調用readline()才能達到所需的起始點有點緩慢的事情。謝謝! – Tim 2013-02-19 13:09:05