parserlines = [line.strip().split(",") for line in open("C:\\Python34\\filename_convention.txt", 'r')]
print(parserlines[1])
#[1]source_dir[2]source_pattern[3]target_dir[4]prefix
parserarrayI101 = parserlines[1]
parserarrayO101 = parserlines[2]
parserarrayI103 = parserlines[3]
parserarrayO103 = parserlines[4]
parserarrayI195 = parserlines[5]
parserarrayO195 = parserlines[6]
parserarrayI199 = parserlines[7]
parserarrayO199 = parserlines[8]
parserarrayI900 = parserlines[9]
parserarrayO900 = parserlines[10]
parserarrayI910 = parserlines[11]
parserarrayO910 = parserlines[12]
parserarrayI195 = parserlines[13]
parserarrayO195 = parserlines[14]
parserarrayI199 = parserlines[15]
parserarrayO199 = parserlines[16]
print(parserarrayI900[2])
然后我得到以下追溯:
Traceback (most recent call last):
File "C:\Python34\listtest.py", line 16, in <module>
parserarrayI910 = parserlines[11]
IndexError: list index out of range
文件中有16行需要读取。还有更好的方法吗?
答案 0 :(得分:1)
不,Python lists的大小没有限制,这是你正在使用的(除了系统的内存)。我相信它们是作为灵活的阵列实现的;这意味着它们是引擎盖下的阵列,但它们会动态调整大小以适应您添加到它们中的许多项目。
问题在于你的文件以及它是如何被读入的。正如评论中所建议的那样,可能是行结尾被误解。尝试在阅读文件后立即打印出parserlines
变量,它会向您显示文件的实际读入方式。请考虑使用pretty print模块,以便更轻松地查看:pprint.pprint(parserlines)
答案 1 :(得分:0)
如果数据文件是由观察MSDOS文件约定的程序生成的,则行分隔符为“\ r \ n”而不是“\ n”。
可以通过稍微修改open:
来使用该约定open("C:/Python34/filename_convention.txt", "rt")
添加t
表示使用MSDOS文本模式约定。