我最近开始使用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中实现此类返回的帮助。
答案 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
)或或或......对于此类情况,您可能必须谨慎做出额外的区别。