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

2024-04-25 14:52:57 发布

您现在位置: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只知道我需要的信息。你知道吗


Tags: 格式year文本文件th1prereqth2times1times2
3条回答

试试这个。可以使用^{}^{}。你知道吗

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])

假设你找到了你感兴趣的产品线:

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'

如果要查找的行的各个部分与行的开头有已知的偏移量,则可以使用iterable切片语法。你知道吗

3)正则表达式

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

这是一个更高级的版本,它的全面覆盖超出了范围,但是here's the documentation。你知道吗

如果您感兴趣的所有行都包含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

相关问题 更多 >