我试图从文本文件中提取单位信息。此功能始终返回' m'无论文件中的实际单位如何。我做错了什么?
def get_seba_unit(file):
with open(file) as f:
unit = ''
lines = f.readlines()
if lines[10].find('m'):
unit = 'm'
elif lines[10].find('cm'):
unit = 'cm'
elif lines[10].find('°C'):
unit = '°C'
print('found Unit: ' + unit + ' for sensor: ' + file)
return(unit)
答案 0 :(得分:1)
这不符合你的想法:
if lines[10].find('m'):
find
会返回您要查找的内容的索引,如果找不到,则返回-1
。因此,除非m
是该行的第一个字符(索引0
),否则您的条件将始终为True
(在Python中,非零数字是真实的)
您可能想尝试if 'm' in line[10]
而不是
另外,请在cm
之前检查m
,否则您永远不会找到cm
答案 1 :(得分:0)
如果您正在寻找的是从数据中提取单位的方法,我会使用一些简单的正则表达式,如下所示:
import io
import re
from collections import defaultdict
data = io.StringIO("""
1cm
2m
3°C
1cm 10cm
2m 20m
3°C 30°C
""")
def get_seba_unit(file):
floating_point_regex = "([-+]?\d*\.\d+|\d+)"
content = file.read()
res = defaultdict(set)
for suffix in ['cm', 'm', '°C']:
p = re.compile(floating_point_regex + suffix)
matches = p.findall(content)
for m in matches:
res[suffix].add(m)
return dict(res)
print(get_seba_unit(data))
你会得到像这样的输出:
{'cm': {'1', '10'}, '°C': {'3', '30'}, 'm': {'2', '20'}}
当然,上面的代码只是假设你的单位是浮点单位,但主要的想法是使用正则表达式攻击这个问题。