Python3:如何提取文本文件中的最后一个字段

时间:2015-04-26 20:38:33

标签: python-3.x string-split

我使用Python3在文本文件中搜索字符串,但我无法检索匹配的最后一个字段。知道什么是错的吗?这是我的代码:

shakes = open("CFTUTIL_idparm0.log","r")
for line in shakes:
    if re.match("(.*) Local partner identifier (.*)", line):
       myPart = line.split(" ")[-2]
       print (myPart,end="",flush=True)
       print(type(line))

此代码适用于除此test file以外的其他文件。

1 个答案:

答案 0 :(得分:0)

  

不确定为什么因为分隔符是空格,如果我以十六进制转储行。

即使所有分隔符都是空格,

split(' ')split()也会产生非常不同的结果。

为了说明,让我们从您的文件中删除一行:

>>> line = '          Local partner identifier    PART     = W096952B                        \n'

现在,让我们将它拆分为空格:

>>> line.split(' ')
['', '', '', '', '', '', '', '', '', '', 'Local', 'partner', 'identifier', '', '', '', 'PART', '', '', '', '', '=', 'W096952B', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\n']

现在,让我们把它分开,而不是split

>>> line.split()
['Local', 'partner', 'identifier', 'PART', '=', 'W096952B']

这两者非常不同。因此,当您获取拆分的最后一个元素时,会检索到非常不同的结果:

>>> line.split()[-1]
'W096952B'

>>> line.split(' ')[-1]
'\n'

解决方案是使用split()而不是split(' ')

文档

您可以使用python的交互式文档了解split的行为。在命令提示符下运行help(line.split)会产生:

有关内置功能拆分的帮助(强调添加):

  

有关内置功能拆分的帮助:

     

分裂(...)
    S.split([sep [,maxsplit]]) - >字符串列表

     

返回S中单词的列表,使用sep作为     分隔符字符串。如果给出maxsplit,最多是maxsplit     分裂完成。 如果未指定sep或者为None,则为any     空白字符串是一个分隔符,空字符串是     从结果中删除。

注意最后一行:只有在未指定sep或None时才会删除空字符串。将sep指定为' '后,将包含所有空字符串,如上所示。