在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 块中“*点击次数(修改)”


这是什么文件格式?是什么程序生成的?什么程序通常读取它?您希望读入Python的哪一部分?有很多像这样的文件吗,或者它们有不同的字段吗?“ABC名称”、“A”、“B”和“起始位置”是什么意思?你的例子太大,难以辨认。假定您要忽略空行和空行:在Markus的行之后,该行的内容为
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"])