在Python中读取块数据?
我在读取数据文件时遇到问题:在Python中读取块数据?,python,file,Python,File,我在读取数据文件时遇到问题: /// * ABC Names A-06,B-18, * Data 1.727e-01, 1.258e-01, 2.724e-01, 2.599e-01,-3.266e-01,-9.425e-02,-6.213e-02, 1.479e-01, 1.219e-01, 1.174e-01, 2.213e-01, 2.875e-01,-2.306e-01,-3.900e-03,-5.269e-02, 7.420e-02, 2.592e-01, 2.513e-01,
///
* ABC Names
A-06,B-18,
* Data
1.727e-01, 1.258e-01, 2.724e-01, 2.599e-01,-3.266e-01,-9.425e-02,-6.213e-02, 1.479e-01,
1.219e-01, 1.174e-01, 2.213e-01, 2.875e-01,-2.306e-01,-3.900e-03,-5.269e-02, 7.420e-02,
2.592e-01, 2.513e-01, 2.242e-01, 2.620e-01,-1.346e-01,-6.844e-02,-4.139e-02, 9.502e-02,
1.981e-01, 1.937e-01, 2.336e-01, 1.617e-01,-4.240e-02, 2.285e-02, 1.878e-02, 1.064e-01,
9.562e-02, 6.727e-02, 1.135e-01, 6.765e-02,-7.850e-02, 6.711e-02, 1.317e-02, 8.367e-02,
* Starting position
-.5000E+01
///
用Python运行的代码?我尝试使用readline()
,readlines()
函数,但没有结果。假设文件名为“abc.txt”,并且在当前目录中;然后是以下Python脚本:
f = open("abc.txt")
all_lines = f.readlines()
将所有行读入字符串列表所有行
,每个行都有其结尾\n
和all
除非你告诉我们,否则我们无法猜测你接下来要做什么,但是你要问的部分,即读数,应该是满意的。假设你想将块从*数据到*起始位置
f=0
for line in open("file"):
line=line.strip()
if "Starting" in line:
f=0
if "Data" in line:
f=1
continue
if f:
print line
这个想法是设置一面旗帜。如果命中*数据,则设置标志。如果设置了“打印所有行”标志。如果点击了*Starting,请关闭标志。这应该适用于块名为“a”、“b”和“c”的文件。它将创建一个字典,其中键作为块标题,如下所示:
{'a':['line1','line2'],'b':['line1'],'c':['line1','line2','line3']}
代码:
没有任何其他信息
data = [
1.727e-01, 1.258e-01, 2.724e-01, 2.599e-01,-3.266e-01,-9.425e-02,-6.213e-02, 1.479e-01,
1.219e-01, 1.174e-01, 2.213e-01, 2.875e-01,-2.306e-01,-3.900e-03,-5.269e-02, 7.420e-02,
2.592e-01, 2.513e-01, 2.242e-01, 2.620e-01,-1.346e-01,-6.844e-02,-4.139e-02, 9.502e-02,
1.981e-01, 1.937e-01, 2.336e-01, 1.617e-01,-4.240e-02, 2.285e-02, 1.878e-02, 1.064e-01,
9.562e-02, 6.727e-02, 1.135e-01, 6.765e-02,-7.850e-02, 6.711e-02, 1.317e-02, 8.367e-02,
]
下面是一些可能加载文件类型的代码的完整猜测,这是一个示例,但应该有点健壮:
f = open("mdata.txt")
data_dict = {}
section = None
data_for_section = ""
for line in f:
line = line.strip() #remove whitespace at start and end
if section != None and (line[0] == "*" or line == "///"):
# if we've just finished a section, put whatever we got into the data dict
data_dict[section] = [bit for bit in data_for_section.split(",") if bit != ""]
if line[0] == "*":
# "*" denotes the start of a new section, probably, so remember the name
section = line [2:]
data_for_section = ""
continue
data_for_section += line
f.close()
#got the data, now for some output
print "loaded file. Found headings: %s"%(", ".join(data_dict.keys()))
for key in data_dict.keys():
if len(data_dict[key])>5:
print key, ": array of %i entries"%len(data_dict[key])
else:
print key, ": ", data_dict[key]
文件的哪些输出:
loaded file. Found headings: ABC Names, Data, Starting position
ABC Names : ['A-06', 'B-18']
Data : array of 40 entries
Starting position : ['-.5000E+01']
但是关于ABC名称以及它们如何与文件的其余部分结合,我们需要更多的信息。谢谢您的回复。然而,我试图从Markus的代码开始,但当这行和那行之间存在空白时失败了。 例子: /// “filename.txt”有: *ABC名称 A-06,B-18, *资料 1.727e-01、1.258e-01、2.724e-01、2.599e-01、-3.266e-01、-9.425e-02、-6.213e-02、1.479e-01、, 1.219e-01、1.174e-01、2.213e-01、2.875e-01、-2.306e-01、-3.900e-03、-5.269e-02、7.420e-02、, 2.592e-01、2.513e-01、2.242e-01、2.620e-01、-1.346e-01、-6.844e-02、-4.139e-02、9.502e-02、, 1.981e-01、1.937e-01、2.336e-01、1.617e-01、-4.240e-02、2.285e-02、1.878e-02、1.064e-01、, 9.562e-02、6.727e-02、1.135e-01、6.765e-02、-7.850e-02、6.711e-02、1.317e-02、8.367e-02、, *起始位置 -.5000E+01
- 点击总数(已修改) 十八
- 点击次数(修改)
448
748
///
“起始位置”和“点击总数(修改)”之间有空行时出错。
我需要数据:
1.727e-01、1.258e-01、2.724e-01、2.599e-01、-3.266e-01、-9.425e-02、-6.213e-02、1.479e-01、,
1.219e-01、1.174e-01、2.213e-01、2.875e-01、-2.306e-01、-3.900e-03、-5.269e-02、7.420e-02、,
2.592e-01、2.513e-01、2.242e-01、2.620e-01、-1.346e-01、-6.844e-02、-4.139e-02、9.502e-02、,
1.981e-01、1.937e-01、2.336e-01、1.617e-01、-4.240e-02、2.285e-02、1.878e-02、1.064e-01、,
9.562e-02、6.727e-02、1.135e-01、6.765e-02、-7.850e-02、6.711e-02、1.317e-02、8.367e-02、,
在块“*数据”中
有时需要数据
448 748 块中“*点击次数(修改)”
line=line.strip()
添加另一行如果不是行:继续
loaded file. Found headings: ABC Names, Data, Starting position
ABC Names : ['A-06', 'B-18']
Data : array of 40 entries
Starting position : ['-.5000E+01']
startingPosition = float(data_dict["Starting position"][0])
data_list_of_floats = map(float, data_dict["Data"])