2014-11-02 32 views
0

我的程序应该从用户处获取输入并读取带有名称输入的文件。阅读文件被保存到名为投资组合的词典中,并且从那里我必须将投资组合中的每一行排序为键和值。将文件中的行拆分为不同的列表

这是我的代码。

portfolio = {} 
portfolio = file_read() #Reads the file through a function 
if file_empty(portfolio) == True or None: #nevermind this, it works 
    print "The file was not found." 
else: 
    print "The file has successfully been loaded" 

for line in portfolio: 
    elements = line.strip().split(",") #separate lists by comma 
    print elements[0] #using this to check 
    print elements[1] #if it works at all 

这一切确实是打印的第一个字母在第一线,这是S.而且很显然[1]应该元素是第二个字母,但索引超出范围,请赐教可能是什么错误。

谢谢。

+0

为什么你使用相同的变量投资组合名称为两个不同的东西? – Hackaholic 2014-11-02 20:50:09

+0

是你的file_read函数会返回值为dcitionary? – Hackaholic 2014-11-02 20:51:10

+0

plz分享您的整个代码? – Hackaholic 2014-11-02 20:52:51

回答

0

它看起来像file_read()正在读取文件到一个字符串。

Then for line in portfolio:正在遍历该字符串中的每个字符

然后elements = line.strip().split(",")会给你一个包含一个字符的列表,所以试图获得elements[1]已经超出了列表的范围。

如果你想读取文件的全部内容到一个名为portfolio字符串,可以使用

for line in porfolio.split('\n'): 
    ... 

而是通过线迭代的更常见的方式,通过串中的每个线迭代文件将

with open(filename,'r') as inputfile: 
    for line in inputfile: 
     .... 
+0

如何让它不会被分成一个包含一个字符的列表?我希望它能够在逗号前面捕捉所有内容。 @khelwood – adam 2014-11-02 20:58:14

+0

你的问题是'for line in porfolio'在某个时间将'line'分配给_one个字符。改变,正如我在我的答案中所说的那样。 – khelwood 2014-11-02 21:00:27

+0

它适用于portfolio.split('\ n')中的行。尝试在for循环外使用该文件时出现新的错误,索引总是超出范围。 @khelwood – adam 2014-11-02 21:15:25

0

得到它与此代码的工作:

for line in minfil : 
    line = line.strip() 
    elements = line.split(",") 
    portfolio[str(elements[0])] = [(int(elements[1]),float(elements[2]), str(elements[3]))] 
相关问题