使用 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 有一个正则表达式模块,可用于基于编程模式的文本提取。
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
方法将 return 所有字符串的列表(不重叠) - 还有其他方法,例如 re.search
和 re.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
我有一个文本文件,其中包含这样一行:
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 有一个正则表达式模块,可用于基于编程模式的文本提取。
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
方法将 return 所有字符串的列表(不重叠) - 还有其他方法,例如 re.search
和 re.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