使用python从文本文件中提取数据

2024-05-14 07:51:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,其中包含这样一行:

Component Sizing Information, AirTerminal:SingleDuct:VAV:Reheat, SPACE2-1 VAV REHEAT, Design Size Maximum Flow per Zone Floor Area during Reheat [m3/s-m2], 1.31927E-003

当数字前的语句为(仅举一个例子!)时,我想提取行(1.31927E-003)末尾的数字:

Design Size Maximum Flow per Zone Floor Area during Reheat [m3/s-m2]

事实上,文本文件中有几个关键语句,我需要分别提取紧跟其后的数字

你推荐什么样的库和方法?(使用python 3)。谢谢


Tags: zonesize数字areaflowm3design文本文件
2条回答

重模块

Python有一个正则表达式模块,用于从文本中进行基于编程模式的提取

re是Python 3中的正则表达式模块

这是一种适用于特定情况的模式(但可能需要根据字符串的一致性进行更改)


图案

找出适合您的案例的模式-在您的案例中,我们可以确定以下内容:

  • 您有一个可以重复0-9之间的整数的数字:

    `[0-9]+`
    
  • 您有一个小数点:

    `\.` # \ is used as an escape character for a literal . as . has a use in regex
    
  • 您有一个数字字符串,其中包含字母E和连字符-

    `[0-9E-]+`
    

按顺序组合这些功能:

pattern = r'[0-9]+\.[0-9E-]+'

注意在许多正则表达式示例中,字符串前面的r'...'通常是r表示原始字符串,可以更好地处理字符串中的潜在转义字符


Python中的正则表达式

我们需要将其编译为regex(正则表达式)对象: prog = re.compile(pattern)

findall方法将返回所有字符串(不重叠)的列表-还有其他方法,如re.searchre.match具有其他特定输出:

results = re.findall(prog, your_string)

试验

import re
mystr = 'Component Sizin1..31927J-003ggnoor' \
        ' Ar1.31927E-003ea' \
        ' du' \
        'rin1g.31927E-003g Re' \
        'he1.t31927E-003at ' \
        '[m3/s-m1.34545457E-0032], 1.3' \
        '191.31927E-00327' \
        'E-01...31927E-00303'

pattern = r'[0-9]+\.[0-9E-]+'
prog = re.compile(pattern)
results = re.findall(pattern, mystr)
print(results)

.........

['1.31927E-003', '1.34545457E-0032', '1.3191']

学习正则表达式需要练习(以及良好的交互环境),例如regex101

如果所有行都相似,则可以拆分原始行并提取数字,如下所示:

string = "Component Sizing Information, AirTerminal:SingleDuct:VAV:Reheat, SPACE2-1 VAV REHEAT, Design Size Maximum Flow per Zone Floor Area during Reheat [m3/s-m2], 1.31927E-003"
string = string.split(',')          #split the string at commas
number = string[-1]                 #Extract the last number.
number = number.strip()             #remove extra white spaces

相关问题 更多 >

    热门问题