用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=?
(?<=...)