如何读取包含字符串的行然后在没有此字符串的情况下提取此行

时间:2018-05-26 07:35:00

标签: python python-3.x

我有一个包含特定行的文件.txt,比如

file.txt的

.
.
T - Python and Matplotlib Essentials for Scientists and Engineers
.
A - Wood, M.A.
.
.
.

我想提取包含字符串的行,我尝试使用一个简单的脚本:

with open('file.txt','r') as f:
    for line in f:
        if "T - " in line:
            o_t = line.rstrip('\n')
        elif "A - " in line:
            o_a = line.rstrip('\n')


o_T = o_t.split('T - ')
print (o_T)

o_A = o_a.split('A - ')
#o_Fname =
#o_Lname =
print (o_A)

我的输出:

['', 'Python and Matplotlib Essentials for Scientists and Engineers']
['', 'Wood, M.A.']

和我想要的输出:

Python and Matplotlib Essentials for Scientists and Engineers
Wood, M.A.

此外,对于第二个(" Wood,M.A。"),我还可以提取姓氏和名字。 所以最终结果将是:

 Python and Matplotlib Essentials for Scientists and Engineers
 Wood
 M.A.

2 个答案:

答案 0 :(得分:2)

使用filter删除列表中的所有空元素。

<强>实施例

o_T = filter(None, o_t.split('T - '))
print (o_T)
o_A = filter(None, o_a.split('A - '))
print (o_A)

<强>输出:

['Python and Matplotlib Essentials for Scientists and Engineers']
['Wood, M.A.']

答案 1 :(得分:1)

您的情况中的错误是您打印o_t而不是o_T(这是拆分操作的结果)。

然而,正如其他人指出的那样,您也可以通过使用正则表达式\w - (.+)删除前4个字符来解决此问题,然后您可以获取所有值。如果您还需要第一个字符,则可以使用(\w) - (.+)

除此之外,如果你给你的变量更好的名字,你会有更好的生活:)