从文本文件(Python)中提取行的特定部分
我有一个文本文件,格式如下:从文本文件(Python)中提取行的特定部分,python,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 从第二行开始 我能够阅读我想要的特定行,但我不知道如何拆分/剥离我需要的信息。如果您感兴趣的所有
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
从第二行开始
我能够阅读我想要的特定行,但我不知道如何拆分/剥离我需要的信息。如果您感兴趣的所有行都包含PREREQ mecnyyy,其中yyy是年份号,您可以使用如下所示的正则表达式: 编辑:更正了代码
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
试试这个。您可以使用和
假设您已经找到您感兴趣的产品线:
line = "MECN3010 PREREQ MECN2011 COREQ TIMES1 TIMES2 MO3, MO4, FR5, TH1, TH2"
有几种方法可以提取给定字段:
1基于令牌
基本上,您首先使用split将行拆分为一个标记列表,然后使用基本列表索引选择您感兴趣的标记
如果您对多个令牌感兴趣,可以将它们切掉并重新加入:
>>> ' '.join(tokens[1:3])
'PREREQ MECN2011'
2基于职位的
如果要查找的线的各个部分与线的起点之间存在已知偏移,则可以使用iterable切片语法
3正则表达式
这是一个更高级的版本,对它的全面覆盖超出了范围,但是。您如何知道您想要哪一部分?换句话说,是什么定义了你要寻找的作品的界限?从行首开始的字符数?如果用空格等分隔行,则为第n个字。使用data.split[0]提取第一个字段。split在默认情况下使用空格。我认为行开头的字符数,因为整个文件的格式相同。所以基本上,我想从'PREREQ'之后直到'COREQ'之前提取行的一部分。有没有方法让我检查一行中有多少字段?你必须知道你的分隔符。如果你认识他们,是的,有办法。也许你可以看看我下面基于正则表达式的答案,谢谢!我不太明白正则表达式的方法,但其他两个都很好!
>>> tokens = line.split()
>>> tokens
['MECN3010', 'PREREQ', 'MECN2011', 'COREQ', 'TIMES1', 'TIMES2', 'MO3,', 'MO4,', 'FR5,', 'TH1,', 'TH2']
>>> tokens[2]
'MECN2011'
>>> tokens[5]
'TIMES2'
>>> ' '.join(tokens[1:3])
'PREREQ MECN2011'
>>> line[16:24]
'MECN2011'
>>> line[38:44]
'TIMES2'
>>> re.search(r'(TIMES\d)', line).groups()
('TIMES1',)
>>> re.findall(r'TIMES\d', line)
['TIMES1', 'TIMES2']