用Python从文本文件中提取数字数据

用Python从文本文件中提取数字数据,python,string,extract,Python,String,Extract,假设我有一个包含数据/字符串的文本文件: Dataset #1: X/Y= 5, Z=7 has been calculated Dataset #2: X/Y= 6, Z=8 has been calculated Dataset #10: X/Y =7, Z=9 has been calculated 我希望输出在csv文件上,如下所示: X/Y, X/Y, X/Y 其中应显示: 5, 6, 7 这是我目前的方法,我使用string.find,但我觉得解决这个问题相当困难: data

假设我有一个包含数据/字符串的文本文件:

Dataset #1: X/Y= 5, Z=7 has been calculated
Dataset #2: X/Y= 6, Z=8 has been calculated
Dataset #10: X/Y =7, Z=9 has been calculated 
我希望输出在csv文件上,如下所示:

X/Y, X/Y, X/Y
其中应显示:

5, 6, 7
这是我目前的方法,我使用string.find,但我觉得解决这个问题相当困难:

data = open('TestData.txt').read()
#index of string
counter = 1

if (data.find('X/Y=')==1):      
#extracts segment out of string
    line = data[r+6:r+14]
    r = data.find('X/Y=')
    counter += 1 
    print line
else: 
    r = data.find('X/Y')`enter code here`
    line = data[r+6:r+14]
    for x in range(0,counter):
    print line


print counter

错误:由于某些原因,我只得到了5的值。当我设置一个#循环时,我得到无穷多的5

由于实体似乎都在一行上,我建议在
循环中使用
readline
逐行读取文件,然后使用
regex
从该行解析出要查找的组件

编辑re:OP的评论:


在这种情况下,一个可用于捕获给定格式的数字的正则表达式模式是:
X/Y\s*=\s*(.+),

,因为实体似乎都在一行上,我建议在
循环中使用
readline
逐行读取文件,然后使用
regex
从该行解析出要查找的组件

编辑re:OP的评论:


在这种情况下,如果您需要数字,并且txt文件的格式与前两行相同,即
X/Y=6
,而不是
X/Y=7
,则可以使用一种正则表达式模式来捕获给定格式的数字:

import re
result=[]
with open("TestData.txt") as f:
    for line in f:
        s = re.search(r'(?<=Y=\s)\d+',line) # pattern matches up to "Y" followed by "=" and a space "\s" then a digit or digits. 
        if s: # if there is a match i.e re.search does not return None, add match to the list.
            result.append(s.group())
print result
['5', '6', '7']

(?如果您想要数字和txt文件的格式与前两行相同,即
X/Y=6
,而不是
X/Y=7

import re
result=[]
with open("TestData.txt") as f:
    for line in f:
        s = re.search(r'(?<=Y=\s)\d+',line) # pattern matches up to "Y" followed by "=" and a space "\s" then a digit or digits. 
        if s: # if there is a match i.e re.search does not return None, add match to the list.
            result.append(s.group())
print result
['5', '6', '7']

(?在使用正则表达式解析组件时,您会对正则表达式参数使用什么?r=re.compile(^X/Y=|,$)?明白了!这有助于澄清我在底部解决方案中遇到的问题。谢谢!在使用正则表达式解析组件时,您会对正则表达式参数使用什么?r=re.compile(^X/Y=|,$))?明白了!这有助于澄清我在底部解决方案中遇到的问题。谢谢!那么对于更复杂的文本文件,这将如何工作?假设我现在在文本文件中有一个额外的Y:Dataset#1:Y=2,X/Y=5,Z=7已经计算完毕。我添加了输出,前面的内容是无关的,我们所要寻找的是
Y=5
,是的,不是很抱歉,我刚刚更新了我的评论,我现在得到了参数。非常感谢你与我澄清。你能观察更新后的评论吗?假设我已经计算了Dataset#1:Y=2,X/Y=5。但我只想要X/Y=1的值5@user3685687,它将再次工作,因为模式必须具有Y=5。有办法吗要使模式X/Y=?那么对于更复杂的文本文件,这将如何工作?假设我现在的文本文件中有一个额外的Y:Dataset#1:Y=2,X/Y=5,Z=7已经计算完毕。我添加了输出,前面的内容是不相关的,我们正在寻找的是
Y=5
,是的与我们的模式不匹配抱歉,我刚刚更新了我的注释,我得到了现在是e参数。非常感谢你与我澄清。你能观察更新的注释吗?假设我已经计算了数据集#1:Y=2,X/Y=5。但我只希望X/Y=5@user3685687,它同样可以工作,因为模式必须有Y=5。有没有办法使模式X/Y=?
(?<=...)