【问题标题】:Python - Text file into dictionaryPython - 文本文件到字典
【发布时间】:2016-12-02 13:24:21
【问题描述】:

我最近开始在 python 中处理文本文件(如何以不同的方式返回它们,如何生成文本文件等等),我发现文本文件也可以作为 python 中的字典返回,我想知道如何实现这一目标。假设我有一个文本文件,其中包含某些类型的货币及其买卖价值,我想在某种字典中返回它们。例如,文本文件将包括:

Num Date____ Bank Type_______ NCu CCu Buy___________ Sell__________
001 20161130 NLB_ individuals 840 USD 0001,074800000 0001,050800000 

并会返回某种字典,其中包括作为键的货币和作为键的买入和卖出值的元组。所以上面的文本文件会产生:

'USD': (1.0748, 1.0508)}

非常感谢有关如何在 python 中实现这种返回的帮助。

【问题讨论】:

标签: python dictionary text


【解决方案1】:

让我们按行处理文件,创建字典,分割行,创建条目,在这个过程中将文本转换为浮点数(逗号必须替换为点)

test="""Num Date____ Bank Type_______ NCu CCu Buy___________ Sell__________
001 20161130 NLB_ individuals 840 USD 0001,074800000 0001,050800000
001 20161130 NLB_ individuals 840 CHF 0002,074800000 0004,050800000
""".splitlines().__iter__()

d = dict()

next(test)  # skip title line
for line in test:
    toks = line.split()
    if len(toks)==8:
        d[toks[5]] = (float(toks[6].replace(",",".")),float(toks[7].replace(",",".")))

print(d)

结果:

{'USD': (1.0748, 1.0508), 'CHF': (2.0748, 4.0508)}

这只是一个独立的测试。使用文件运行时,只需将字符串替换为:

with open("input.txt") as test:

它的作用相同,但以文件为输入。

(或使用 csv 模块,但 1)这对于您的情况似乎有点过分,2)我们不知道分隔符是制表符、空格还是超过 1 个空格/制表符。 str.split 也处理这个问题,所以我会坚持使用它,直到出现包含空格的字段:))

【讨论】:

    【解决方案2】:

    文本:

    Num Date____ Bank Type_______ NCu CCu Buy___________ Sell__________
    001 20161130 NLB_ individuals 840 USD 0001,074800000 0001,050800000 
    

    main.py:

    exchange_rates = {}
    with open("text") as file:
        next(file)
        for line in file:
            data = line.split(" ")
            ccu = data[5]
            buy = float(data[6].replace(",", "."))
            sell = float(data[7].replace(",", "."))
            exchange_rates[ccu] = (buy, sell)
    
    print(exchange_rates)
    

    您将空格" " 处的每一行拆分为包含数据的列表:

    data = line.split(" ")
    

    然后您必须将字符串"0001,07400" 转换为float。为此可以使用float( ),但这需要先将"0001,07400" 转换为"0001.0740"

    float(data[6].replace(",", "."))
    

    这是简单文件解析。但是,当数据丢失(即 7 个​​而不是 8 个条目)或格式不同(0001.074 而不是 0001,074)或 or or 时,您必须小心谨慎。对于这种情况,您可能需要做出额外的区分。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多