【问题标题】:Does an array have a limit to how many lines can be read?数组对可以读取的行数有限制吗?
【发布时间】:2015-06-30 19:03:48
【问题描述】:
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:

Traceback (most recent call last):  
   File "C:\Python34\listtest.py", line 16, in <module>  
      parserarrayI910 = parserlines[11]  
IndexError: list index out of range

文件中有 16 行需要读取。还有更好的方法吗?

【问题讨论】:

  • 你知道在 Python 中列表是从零开始的吗?还是您故意使用parserlines[1] 跳过第一个元素?你确定line.strip().split(',') 给出了你想要的结果吗?
  • 是的,第一行是标题。我需要数组中的各个元素。
  • 能否请您发布一点输入文件(2-5 行)?
  • 没有 16 行。检查行尾
  • 我不知道,我赞成显式声明文件模式,特别是因为不同的开放协议可以有不同的默认模式(例如 tempfile 等)。但是,在这里使用“with open”是……必须的。

标签: python arrays list


【解决方案1】:

不,Python lists 的大小没有限制,这是您使用的(系统内存除外)。我相信它们被实现为灵活的数组;这意味着它们实际上是数组,但它们会动态调整大小以适应您添加到其中的任何项目。

问题在于您的文件及其读取方式。如 cmets 中所建议的那样,可能是行尾被误解了。尝试在读取文件后立即打印出您的 parserlines 变量,它会显示文件的实际读取方式。考虑使用 pretty print 模块以使其更易于查看:pprint.pprint(parserlines)

【讨论】:

    【解决方案2】:

    如果数据文件是由遵循 MSDOS 文件约定的程序生成的,则行分隔符是“\r\n”而不是“\n”。

    可以通过稍微修改 open 来使用该约定:

    open("C:/Python34/filename_convention.txt", "rt")
    

    添加t 表示使用MSDOS 文本模式约定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2013-06-20
      • 2012-12-23
      • 2012-02-08
      • 1970-01-01
      • 2022-10-25
      • 2013-04-11
      • 1970-01-01
      相关资源
      最近更新 更多