根据提供的参数从Python中的文本文件中读取数据

Reading data from a text file in Python according to the parameters provided

我有一个类似这样的文本文件

Mqtt_allowed=true
Mqtt_host=192.168.0.1
Mqtt_port=2223
<=============>
cloud_allowed=true
cloud_host=m12.abc.com
cloud_port=1232
<=============>
local_storage=true
local_path=abcd

我需要获取用户提供的每个值 w.r.t 参数。 我现在正在做的是:

def search(param):
    try:
        with open('config.txt') as configuration:
            for line in configuration:
                if not line:
                    continue    
                function, f_input=line.split("=")
                if function == param:
                    result=f_input.split()
                    break
                else:
                    result="0"
    except FileNotFoundError:
        print("File not found: ")
    return result

mqttIsAllowed=search("Mqtt_allowed")
print mqttIsAllowed

现在当我只调用 mqt 东西时它工作正常但是当我在“<==========>”分隔之后调用云或任何东西时它会抛出错误。谢谢

跳过所有以<开头的行:

if not line or line.lstrip().startswith("<"):
    continue

或者,如果您真的非常想精确匹配分隔符:

if line.strip() == "<=============>":
    continue

我认为第一个变体更好,因为如果有人不小心稍微修改了分隔符,第二段代码将根本无法工作。

因为您正试图以 standard INI format 的样式拆分 = 字符,可以安全地假设您的对的最大尺寸为 2。我是不喜欢使用依赖字符检查的方法(除非特别要求),所以试一试:

def search(param):
    result = '0' # declare here
    try:
        with open('config.txt') as configuration:
            for line in configuration:
                if not line:
                    continue  

                f_pair = line.strip().split("=") # remove \r\n, \n

                if len(f_pair) > 2: # your separator will be much longer
                    continue
                else if f_pair[0] == param:
                    result = f_pair[1]
                    # result = f_input.split() # why the 'split()' here?
                    break

    except FileNotFoundError:
        print("File not found: ")

    return result

mqttIsAllowed=search("Mqtt_allowed")

我很确定您遇到的错误是 ValueError: too many values to unpack

我是这样知道的:

当您为任何 Mqtt_* 值调用此函数时,循环 永远不会 遇到分隔符字符串 <=============>。一旦您尝试调用第一个分隔符下方的任何内容(例如 cloud_* 键),循环最终会到达第一个分隔符并尝试执行:

function, f_input = line.split('=')

但这行不通,事实上它会告诉你:

ValueError: too many values to unpack (expected 2)

那是因为您强制 split() 调用仅推入 2 个变量,但是分隔符字符串上的 split('=') 将 return 包含 15 个元素的列表(a '<'、一个 '>' 和 13 个 '')。因此,执行我在上面发布的操作可确保您的 split('=') 仍然关闭,但会检查您是否点击了分隔符。