【问题标题】:String Index Out Of Range When Reading Text File读取文本文件时字符串索引超出范围
【发布时间】:2017-01-06 16:26:36
【问题描述】:

我在程序的倒数第二行不断收到此错误,我不知道为什么,我所做的只是从文本文件中读取一行。

if (items[0]) == 86947367 :
        with open("read_it.txt") as text_file:
            try:
                price = int(text_file.readlines()[2])
            except ValueError:
                print("error")
            else:
                new_price = int(price * (items2[0]))
                print("£",new_price)
                price_list.append(new_price)
                product = (text_file.readline()[1])
                print(product)

【问题讨论】:

  • readline() 无需阅读更多内容,因为 readlines() 已阅读所有内容。
  • 所以我可以再读一行吗?没有最后两行,我的代码效果很好。 (这只是我程序的一部分)
  • 没有。您可以一次读取所有内容并将其存储在某处以进行处理您逐行读取并处理数据
  • 是的,我正在尝试逐行阅读,我知道如何做到这一点的唯一方法是 .readline()。我希望我的代码按顺序打印出价格然后是产品。
  • 那你为什么用readlines()结尾加一个's'?

标签: python python-3.x


【解决方案1】:

问题:

price = int(text_file.readlines()[2])

readlines() 导致 readline() 不返回任何内容或类似的内容。 尝试将 readlines() 存储在 tmp var 然后

price = tmp[2]
product =tmp[1]

【讨论】:

    【解决方案2】:

    当您使用readlines() 时,文件中的“光标”会到达末尾。如果你第二次调用它,它就没有什么可读的了。

    为避免这种行为,您可以将readlines() 存储在一个变量中以供多次使用,或者使用text_file.seek(0) 将光标放回文件的开头。

    【讨论】:

    • 是的 .seek() 效果很好,谢谢。那么这个函数是否只是重置“光标”?
    • @Mikel.JKK : .seek() 只是将迭代器中的光标移动到某个位置。如果您需要更详细的答案,可以查看此帖子:stackoverflow.com/questions/3266180/…
    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多