[英]extract string from file at specific line in python
我正在尝试从文本文件中提取单元信息。 无论文件中的实际单位如何,此函数始终返回“ 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)
这不会按照您认为的那样做:
if lines[10].find('m'):
find
返回要find
的索引,如果未找到,则返回-1
。 因此,除非m
是该行的第一个字符(索引0
),否则您的条件将始终为True
(在Python中,非零数字为true)
您可能想尝试if 'm' in line[10]
插入if 'm' in line[10]
此外,请在m
之前检查cm
,否则您将永远找不到cm
如果您正在寻找一种从数据中提取单位的方法,那么我将使用一些简单的正则表达式,如下所示:
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'}}
当然,以上代码只是假设您的单位将是浮点单位,但主要思想是使用正则表达式来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.