gpt4 book ai didi

python - 从 Python 中的文本文件中提取数值数据

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:55 25 4
gpt4 key购买 nike

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

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 的值。当我设置 #loop 时,我得到无限个 5。

最佳答案

如果您想要数字并且您的 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']

要匹配您评论中的模式,您应该像 .或者您将匹配 1.2+3 等字符串。"."具有特殊意义。

所以 re.search(r'(?<=Counting Numbers =\s)\d\.\d\.\d',s).group()只会返回 1.2.3

如果它使它更明确,你可以使用 s=re.search(r'(?<=X/Y=\s)\d+',line)使用完整的 X/Y=\s模式。

在您的评论和更新行中使用原始行将返回:

['5', '6', '7', '5', '5']

(?<=Y=\s ) 被称为正向回顾断言

(?<=...)

如果字符串中的当前位置前面有一个以当前位置结束的 ... 的匹配项,则匹配

有很多很好的例子here in the re documentation . parens 中的项目不返回。

关于python - 从 Python 中的文本文件中提取数值数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23923682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com