2014-08-31 70 views
0
exchangerates = [] 
newrate = float(input("Enter amount:")) 
with open("ExchangeRates.txt","r") as readfile: 
    for line in readfile: 
     exchangerates.append(line.strip().split(",")) 
     for line in exchangerates: 
      if line[0] == currency1 and line[1] == currency2: 
       line[2] = newrate 
       print("The exchange rate for",currency1,"and",currency2,"has been changed to",newrate) 
     next 
     return 0 

此代码有效,但我需要知道如何将上面创建的列表中的信息传递到文件中,显示为“Exchangerates.txt”。我将如何做到这一点?如何将列表的内容传递给现有文件?

样本输入和输出:

输入货币1:日元

输入货币2:美元

输入量:3

用于日元与美元的汇率已被更改为3.0

这是发生在我的代码,这是预期的。但是它不会写入文件,并且文件中的信息没有更改,这是我的问题。

+0

目前尚不清楚您所期望的输出是什么;你能提供一些样本输出吗? – 2014-08-31 18:07:20

+0

@MartijnPieters:如果当前行包含currency1和currency2,OP看起来像是用新汇率写入相同的csv文件(从中读取)。 – shahkalpesh 2014-08-31 18:17:11

+0

听起来像你的典型[CSV替换作业](http://stackoverflow.com/search?q=python+replace+csv),的确如此。 – 2014-08-31 18:22:58

回答

0

一个这样做的特别简单的方法是使用Pickle,这样的事情做什么,我想你尝试:

import pickle 
try: 
    with open("ExchangeRates.txt", "rb") as readfile: 
     exchangerates = pickle.load(readfile) 
except FileNotFoundError: 
    exchangerates = {} 

currency1 = input("Enter currency 1: ") 
currency2 = input("Enter currency 2: ") 
newrate = input("Enter exchange rate: ") 

if currency1 in exchangerates: 
    if currency2 not in exchangerates[currency1] or exchangerates[currency1][currency2] != newrate: 
     exchangerates[currency1][currency2] = newrate 
     print("The exchange rate for",currency1,"and",currency2,"has been changed to",newrate) 
else: 
    exchangerates[currency1] = {currency2: newrate} 
    print("The exchange rate for",currency1,"and",currency2,"has been changed to",newrate) 

with open("ExchangeRates.txt", "wb") as writefile: 
    pickle.dump(exchangerates, writefile) 

注意,这个存储汇率像一本字典:{'USD': {'GBP': 1.6, 'YEN': 3}}。如果需要的话,增加/检查和更新反向交易汇率也是相当简单的。

+0

当我尝试使用这个,有一个错误,因为数据类型字符串不支持缓冲区接口@Kkelk – Tom1998 2014-08-31 18:40:55

+0

@ Tom1998啊,对不起,你似乎需要在Python 3中分别将''r''和''w''模式更改为''rb''和''wb''。 – Kkelk 2014-08-31 18:58:11

+0

好的,谢谢@Kkelk – Tom1998 2014-08-31 19:02:32

0

你可以用simplier办法做到这一点:

f = open("ExchangeRates.txt","r") 
exchangerates = f.read() 
f.close() 


lines = exchangerates.split("\n") 

# do the stuff you want to the list with the loops in list of lines 

exchangerates = "\n".join(lines) 

f = open("ExchangeRates.txt","w") 
f.write(exchangerates) 
f.close()