Python - 将文本文件转换为字典

时间:2016-12-02 13:24:22

标签: python dictionary text

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

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

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

'USD': (1.0748, 1.0508)}

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

2 个答案:

答案 0 :(得分:2)

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

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处理它也是如此,所以我会坚持使用它,直到包含空格的字段出现:))

答案 1 :(得分:0)

文本:

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)或或或......对于此类情况,您可能必须谨慎做出额外的区别。