从文本文件中提取行的特定PIECE(Python)

时间:2014-04-28 12:02:21

标签: python

我有一个格式为

的文本文件
3rd Year:

MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2

MECN3012 PREREQ MECN2012 COREQ TIMES1 TUA, WE3, TH1, TH2 TIMES2

我如何只提取一行的特定部分?

例如假设我只想提取

PREREQ MECN 2011

部分来自第二行。

我能够阅读我想要的特定行,但我不知道如何split / strip只需要我需要的信息。

3 个答案:

答案 0 :(得分:0)

如果您感兴趣的所有行都包含PREREQ MECNYYYY,其中YYYY是年份编号,则可以使用如下所示的正则表达式:

编辑:更正了代码

import re
# assume that line holds your text line
regex = ur'PREREQ MECN\d{4}'
matcher = re.search(re.compile(regex), line)
    if (matcher):
        match = matcher.group() #gives the actual match

答案 1 :(得分:0)

试试这个。您可以使用splitjoin

lines = '''3rd Year:
MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2
MECN3012 PREREQ MECN2012 COREQ TIMES1 TUA, WE3, TH1, TH2 TIMES2'''

for line in lines.splitlines()[1:]:
    print " ".join(line.split()[1:3])

答案 2 :(得分:0)

让我们说你找到了你感兴趣的专栏:

line = "MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2"

您有几种方法可以提取给定字段:

1)基于令牌的

>>> tokens = line.split()
>>> tokens
['MECN3010', 'PREREQ', 'MECN2011', 'COREQ', 'TIMES1', 'TIMES2', 'MO3,', 'MO4,', 'FR5,', 'TH1,', 'TH2']
>>> tokens[2]
'MECN2011'
>>> tokens[5]
'TIMES2'

基本上,您首先将该行拆分为一个令牌列表(此处使用split()完成),然后使用基本列表索引选择您感兴趣的那个。

如果您对多个令牌感兴趣,可以将它们切片并重新加入:

>>> ' '.join(tokens[1:3])
'PREREQ MECN2011'

2)基于排名

>>> line[16:24]
'MECN2011'
>>> line[38:44]
'TIMES2'

如果您要查找的行的部分位于行开头的已知偏移处,则可以使用可迭代切片语法。

3)正则表达式

>>> re.search(r'(TIMES\d)', line).groups()
('TIMES1',)
>>> re.findall(r'TIMES\d', line)
['TIMES1', 'TIMES2']

这是更高级的,全面覆盖范围,但here's the documentation