使用python,我试图在文件中搜索一个令牌,然后计算该令牌之前的空格数到该行的开头。
所以如果文件是这样的:
<index>
<scm>
</scm>
</index>
我想找到<scm>
答案 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)
)