我是编程和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,我得到了字符串的错误。没有字符串,它将这两个数组组成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)
答案 0 :(得分:5)
由于numpy.loadtxt
不知道'HEAD'和'END'的格式,我认为你必须自己“排列”这些数组:
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')]
答案 1 :(得分:0)
好的....读取两个数组我必须稍微更改输入文件。我在每个数组前添加了一个字符串列。我不得不这样做让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)