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

Extracting data from text files using 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)。谢谢!

再模块

Python 有一个正则表达式模块,可用于基于编程模式的文本提取。

rePython中的正则表达式模块 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 方法将 return 所有字符串的列表(不重叠) - 还有其他方法,例如 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