开发者社区> 问答> 正文

从文件中选择特定行

我有一个带条目的文本文件


  • Row totalEven

  • 0 125000


  • Row totalEven

  • 0 340000
  • 1 159000


  • Row totalEven

  • 0 1360000
  • 1 1440000
  • 2 1440000
  • 3 1380000
  • 4 1350000
  • 5 1440000
  • 6 1440000
  • 7 1440000
  • 8 1440000
  • 9 1422000
  • 10 180000
    它就像6000多行一样。我需要从第二列获得数字并总结它们。选择这样一条线,

f = open(afile,'r')
for i, l in enumerate(f):

if l=="*    Row   * totalEven *" and (l=='************************'):                                                                                                                            
    continue
else:
    nEv = l.split('*')[2] #here it chooses the 2nd column of the line

但是它给了我一个带有第三列数字的输出,空行和带有“totalEven”的行。然后我也尝试使用,if re.search(' Row totalEven *', l):但它给出了这个错误

Traceback (most recent call last):
File "thecode.py", line 77, in

main()

File "thecode.py", line 45, in main

iArr = getFileValue('rootOut',iArr)

File "thecode.py", line 62, in getFileValue

if re.search('*    Row   * totalEven *', l):

File "/usr/lib64/python2.6/re.py", line 142, in search

return _compile(pattern, flags).search(string)

File "/usr/lib64/python2.6/re.py", line 245, in _compile

raise error, v # invalid expression

sre_constants.error: nothing to repeat

展开
收起
一码平川MACHEL 2019-02-28 11:39:53 1563 0
1 条回答
写回答
取消 提交回答
  • 您的布尔逻辑不正确:

    if l==" Row totalEven " and (l=='*'):
    这怎么能评估True?输入行永远不能同时等于这两个字符串。我认为你需要一个or,而不是and。也许更好:

    if l != " Row totalEven *" and \
    l != '**':

        nEv = l.split('*')[2] # Choose the 2nd column of the line

    现在,请注意[2]选择第三列,而不是第二列:Python具有从零开始的索引。您可以通过获取最后一列来简化此操作:

    nEv = l.split('*')[-1] # Chooses the right-most column of the line

    更正

    由于边距上也有列分隔符,因此列表的每一端都会有一个空字符串,例如

    ['', ' 1 ', ' 1440000 ', '']
    您想要的列是[2]或[-2]。

    2019-07-17 23:29:41
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载