繁体   English   中英

从python中特定行的文件中提取字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM