2016-11-27 49 views
1

即时消息读取一些信息的文件,每个部分用@分隔,但是在每一行我都希望它是一个不同的数组,所以我做了这个,我不知道为什么它不工作。。从文件中拆分并放入一个数组

main_file = open("main_file.txt","r") 
main_file_info=main_file.readlines() 

test=[] 
n=0 
for line in main_file_info: 
     test[n]=line.split("@") 

test=test[n][1:len(test)-1] # to get rid of empty strings at the start and the end 
print(test)# see what comes out 

main_file.close() 
+0

你能告诉什么输出你好吗?请发布您的输入文件的样本。 – Jarvis

+0

即时通讯没有得到任何错误:回溯(最近呼叫最后): 文件“C:\ Users \ Dominic \ Desktop \ Homework creator \ reading files.py”,第14行,在 test [n] = line.split(“@”) IndexError:列表分配索引超出范围 –

+0

我在陈述中添加了一个= n + 1,它仍然执行相同的 –

回答

0

要插入的line.split("@")清单中的输出的方式是错误的。你的列表没有初始化,因此,你不能简单地将任何东西分配给列表中的任何元素。所以,你需要做的是这样的:

test.append(line.split("@")) 

或者,您可以初始化列表如下:

test = [[]]*(len(main_file_info)) 
+0

这工作,但我仍然在开始时获得空字符串,结尾 –

+0

它给了我这个输出:[['','1','1','A','3','none','3','\ n'],['','2' ,'2','B','3','1','2','\ n']] –

+0

在这种情况下,执行以下操作:'new_test = [filter in this test] ',这将删除列表中任何位置的空字符串。 @DominikPraski – Jarvis

0
test = [None for _ in range(total)] 
# instead of test = [] 

或只是简单地追加到test

test.append(line.split("@")) 
相关问题