如何在文件中找到令牌,然后计算令牌之前的空格数?

时间:2017-09-22 10:19:15

标签: python

使用python,我试图在文件中搜索一个令牌,然后计算该令牌之前的空格数到该行的开头。

所以如果文件是这样的:

<index>

   <scm>
   </scm>

</index>

我想找到<scm>

之前的空格数

3 个答案:

答案 0 :(得分:1)

您可以使用正则表达式。空格数为:

import re

with open('input.txt') as f_input:
    r = re.search('( +)' + re.escape("<scm>"), f_input.read(), re.S)
    print len(r.groups()[0])

哪个是3。或者空格字符数:

with open('input.txt') as f_input:
    r = re.search('(\s+)' + re.escape("<scm>"), f_input.read(), re.S)
    print len(r.groups()[0])

哪个是5

答案 1 :(得分:1)

如果您的意思仅适用于单行情况,那么这将为您提供该行的前置空格

def get_preceeding_spaces(file_name, tag):
    with open(file_name, 'r') as f:
        for line in f.readlines():
            if tag in line:
                prefix = line.split(tag)[0]
                if re.match('\s*', prefix):
                    return len(prefix)

print(get_preceeding_spaces('test.html', '<scm>'))

返回您的文件:

3

答案 2 :(得分:1)

单行模式的解决方案:

id | Desc | Active | Enabled | Value | [A LOT OF OTHER COLUMNS]
1  | Bla2 | 1      | 0       | 1     | [A LOT OF OTHER COLUMNS]
4  | Bla4 | 1      | 1       | 1     | [A LOT OF OTHER COLUMNS]
5  | Bla6 | 1      | 1       | 0     | [A LOT OF OTHER COLUMNS]
6  | Bla7 | 0      | 0       | 1     | [A LOT OF OTHER COLUMNS]
8  | Bla1 | 1      | 1       | 0     | [A LOT OF OTHER COLUMNS]

输出:

import itertools

with open('yourfile.txt', 'r') as f:
    txt = f.read()
    print(len(list(itertools.takewhile(lambda c: c.isspace(), txt[txt.index('<scm>')-1::-1]))))
  • 5 - 从字符串txt[txt.index('<scm>')-1::-1]的位置“切换”切片到文本的开头

  • <scm> - 将累积输入字符串中的值/字符(可迭代),直到值/字符为空格(itertools.takewhile(func, iterable)