【问题标题】:Using "readlines()" twice in a row [duplicate]连续两次使用“readlines()”[重复]
【发布时间】:2012-04-29 08:52:29
【问题描述】:

我正在尝试做这样的事情:

Lines = file.readlines()
# do something
Lines = file.readlines()  

但第二次Lines 是空的。这正常吗?

【问题讨论】:

    标签: python io readlines


    【解决方案1】:

    是的,因为.readlines() 将文件指针前进到文件末尾。

    为什么不将行的副本存储在变量中?

    file_lines = file.readlines()
    Lines = list(file_lines)
    # do something that modifies Lines
    Lines = list(file_lines)
    

    这比敲击磁盘两次要高效得多。 (请注意,list() 调用是创建列表副本所必需的,因此对 Lines 的修改不会影响 file_lines。)

    【讨论】:

    • 您在此处的技术将Lines 设置为与file_lines 相同的Python 对象。任何改变一个的东西都会改变另一个,因为它们是同一个对象。为了真正安全,您需要执行lines = file_lines[:] 或以其他方式制作实际副本。顺便说一句,PEP 8 标准建议对变量名使用小写,并为类保留混合大小写,所以我建议将 Lines 更改为 lines
    • @steveha - 我已经添加了list() 电话。至于变量名,我只是重新使用了 OP 的名称,以使其更易于阅读。我同意你的观点,小写通常更好。
    • 我很抱歉。我不确定我是如何错过 list() 包装器的,但我做到了。对此感到抱歉。
    【解决方案2】:

    您需要使用重置文件指针

    file.seek(0)
    

    使用前

    file.readlines()
    

    再次。

    【讨论】:

    • 或者存储行的副本。
    【解决方案3】:

    为了不用每次都用 seek 方法来重新设置,使用 readlines 方法,但你必须像下面这个例子一样将它存储在变量中:

    %%writefile test.txt
    this is a test file!
    #open it
    op_file = open('test.txt')
    #read the file
    re_file = op_file.readlines()
    re_file
    #output
    ['this is a test file!']
    # the output still the same
    re_file
    ['this is a test file!']
    

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      相关资源
      最近更新 更多