2010-09-03 26 views
-4
poem = '''\ 
me:hello dear 
me:hyyy 
asha:edaaaa 
''' 

f=open('poem.txt','r') 
arr=[] 
arr1=[] 
varr=[] 
darr=[] 
i=0 
j=1 
for line in f.read().split('\n'): 
    arr.append(line) 
    i+=1 
f.close() 
#print arr[0] 
#print arr[1] 
#print arr[2] 

text=arr[0].split(':') 
#print text 
line=text[0] 
#print line 
arr1.append(text[1]) 

for i in range(1,len(arr)): 
    text=arr[i].split(':') 
    if(line==text[0]): 
     #print text[1] 
     arr1.append(text[1]) 
    else: 
     if(j==1): 
      j+=1 
      varr[j]=text[0] # this is not working 
      darr[j]=text[1] 
      print len(varr) 
f.close() 
print arr1 
+5

-1 – 2010-09-03 12:43:57

+0

因此,這是現在做什麼課程的作業? – canadiancreed 2010-09-03 19:33:59

回答

0

您正在嘗試將分配給varr[2]對話,但varr是一個空的列表,所以你會得到一個索引錯誤

有許多的方式來解決這個問題的代碼,但我不清楚代碼是應該做什麼

諾斯克洛的回答對我來說似乎是合理的,直到我想到更多。我不確定是否有很多點按名稱分組,因爲這意味着文件的整體結構會丟失。

這裏是如何簡單解析該文件爲list,你可以不問問題後操縱

result = [] 
with open('poem.txt') as f: 
    for line in f: 
     result.append(line.partition(':')[::2]) 

print result 
+0

我_spect(不知道)OP正在嘗試讀取線並根據線的一部分(用戶名,我推測)將它們收集到不同的陣列中。 – 2010-09-03 12:23:23

+0

@Manoj,你可能是對的,它看起來像nosklo同意。我不知道爲什麼第一行被特別對待,或者各種各樣的arr,varr,darr代表了什麼。 – 2010-09-03 12:30:30

5

水晶球模式開啓

from collections import defaultdict 
result = defaultdict(list) 

with open('chat.log') as f: 
    for line in f: 
     nick, msg = line.split(':', 1) 
     result[nick].append(msg) 

print result 
+3

最後你沒有關閉水晶球模式!誰知道你可能會離開的未解決的引用! – 2010-09-03 12:28:39

+0

@Daniel Roseman:垃圾收集器應該自動關閉它:) – nosklo 2010-09-03 13:07:35

+0

+1使用水晶球。除此之外,我的評論與答案無關,與不清楚@anu希望這個問題解決的問題有關。我不確定通過尼克索引郵件真的給你任何東西。首先,消息的順序,包括其他刻痕相對於消息的順序,可能很重要。我看不到由此代碼生成的結構是有用的。 – asveikau 2010-09-03 19:40:57