2014-02-24 82 views
0

我是编程和python的新手。所以我面临很多问题。我需要一些帮助来阅读python中的文本文件。如何从Python中的文本文件读取两个数组或矩阵?

在我的输入文本文件中,我有两个包含一些字符串的数据数组。

HEAD1 
1 0 0 
2 3 4 
3 3 0 
END1 

HEAD2 
2 3 4 
8 7 5 
1 0 7 
END2 

现在我想Python读取这个文件,并将这两个数组存储为2个数组或2个矩阵。数组大小不固定,可以是任何大小。 Python必须根据头部和尾部来决定大小。我该怎么做?

我试过numpy.loadtxt和numpy.getfromtxt.In numpy.getfromtxt,我得到了错误的字符串。如果没有字符串,它会将这2个数组分成1个数组。

这里是试图这样做,但不能做到这一点....

import math as m 
import numpy as np 

file_name=input("Input file name(with extension):") 
file=open(file_name,'r') 

line=file.readline() 
while line!= '': 
    print(line,end='') 
    line=file.readline() 

##table=np.loadtxt(file_name) 
##print('table=') 
##print(table) 
## 
table2=np.genfromtxt(file_name,comments='#') 
print('table2=') 
print(table2) 
+2

你可以显示你尝试过什么一些代码? – zmo

+0

像zmo说,你可以告诉我们你的尝试? –

回答

5

由于这种格式与“HEAD”和“END”不numpy.loadtxt知道一下,我想你一定有以“块”这些阵列自己:

import numpy as np 

def tokenizer(fname): 
    with open(fname) as f: 
     chunk = [] 
     for line in f: 
      if 'HEAD'in line: 
       continue 
      if 'END' in line: 
       yield chunk 
       chunk = [] 
       continue 
      chunk.append(line) 


arrays = [np.loadtxt(A) for A in tokenizer('yourfile.txt')] 
+0

为什么选择downvoted? – wim

+0

对不起,我的不好,我误解了这个问题,我认为你的回答是不正确的。做了一个虚拟的编辑和upvoted。 :-) –

0

OK ....阅读两个数组我不得不改变输入文件一点点。我在每个数组前添加了一个字符串列。我必须这样做才能让Python知道这是两个不同的数组。这里是输入文本文件:

*HEAD1 
    N 1 0 0 
    N 2 3 4 
    N 3 3 0 
    ***** 
    *HEAD2 
    E 2 3 4 
    E 8 7 5 
    E 1 0 7 
    ***** 

我们读我写了下面的代码的文本文件,这两个数组:

import numpy as np 

file_name=input("Input file name(with extension):") 

# read the input file 

with open(file_name) as f: 
    lines1 = (line for line in f if line.startswith('N')) 
    n_table = np.loadtxt(lines1, comments='*',usecols=(1,2,3)) 
    print('n_table=') 
    print(n_table) 

with open(file_name) as f: 
    lines2=(line for line in f if line.startswith('E')) 
    e_table = np.loadtxt(lines2,comments='*',usecols=(1,2,3,4,5)) 
    print('e_table=') 
    print(e_table) 
相关问题