Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python从文本文件读入元数据(带标记)_Python_Csv_Metadata - Fatal编程技术网

如何使用Python从文本文件读入元数据(带标记)

如何使用Python从文本文件读入元数据(带标记),python,csv,metadata,Python,Csv,Metadata,文本文件开头的数据采用以下格式: &SRS <MetaDataAtStart> multiple=True Wavelength (Angstrom)=0.97587 mode=assessment background=True issid=py11n2g noisy=True </MetaDataAtStart> &END Two Theta(deg) Counts(sec^-1) 10.0 41.0 10.1 39.0 10.2

文本文件开头的数据采用以下格式:

&SRS
<MetaDataAtStart>
multiple=True
Wavelength (Angstrom)=0.97587
mode=assessment
background=True
issid=py11n2g
noisy=True
</MetaDataAtStart>
&END
Two Theta(deg)  Counts(sec^-1)
10.0    41.0
10.1    39.0
10.2    38.0
10.3    38.0
&SRS
多重=真
波长(埃)=0.97587
模式=评估
背景=真
issid=py11n2g
嘈杂=真实
&结束
两个θ(deg)计数(第1节)
10.0    41.0
10.1    39.0
10.2    38.0
10.3    38.0

我可以使用什么方法提取wavelenght的元数据值?CSV字典阅读器可以工作吗?

最简单的解决方案是读取文件头:

f = open("data.txt", "r")
for line in f:
    if "</MetaDataAtStart>" in line:
        print "Wavelength data was not found"
        break;
    if "Wavelength" in line:
        print line.split("=")[1]

编辑:

0.97587
import re
f = open("data.txt", "r")
regex = re.compile(r'Wavelength \(Angstrom\)=([0-9]+\.?[0-9]*)')
for line in f:
    result = regex.search(line)
print result.group(1)
0.97587
输出:

0.97587
import re
f = open("data.txt", "r")
regex = re.compile(r'Wavelength \(Angstrom\)=([0-9]+\.?[0-9]*)')
for line in f:
    result = regex.search(line)
print result.group(1)
0.97587

使用lxml的BeautifulSoup可以做到这一点。一旦用findAll()找到标记,就可以提取数据。此时,Python可以轻松地在上拆分(),然后在上拆分=。如果您想要一个代码示例,请告诉我,我会提供一个。

您好,谢谢您的解释,我的数据不是那种格式,在记事本中,带元的行是顶部第一行,格式如下:&SRSmultiple=TrueWavelength(埃)=0.97587mode=assessmentbackground=Trueissid=py11n2gnoisy=True&ENDTwo Theta(deg)Counts(第^-1节)但当我将这种感觉复制并粘贴到任何代码编辑器中时,它会自动为每个字段开始一行新行,这是否会影响上述方法的结果?我能够将“ton1c”给出的代码修改为:以open(“c:\\here.dat”,“r”)作为元部件:对于元部件中的行:如果“Wavelength”in line:print line.split(“=”)[1]可以,但最后一行中的[1]参数是什么?我编辑了我的答案。[1]表示拆分后数组中的1个元素(在1“=”之后的所有元素直到下一个“=”)。再次感谢您完善了答案,但这一行具体做什么:重新编译(r’波长(埃)=([0-9]+\.?[0-9]*))您使用的re模块是什么?谢谢