Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从文本文件(Python)中提取行的特定部分_Python - Fatal编程技术网

从文本文件(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']