【问题标题】:Setting multiple variables from opened file - Python从打开的文件中设置多个变量 - Python
【发布时间】:2015-08-11 20:14:16
【问题描述】:

我使用 python 程序打开一个文件。

file = open('test.txt', 'r')

然后我设置一个变量:

data = file.read()

还有一个:

data2 = file.readlines()

data 变量应该是一个字符串,data2 应该是一个列表。打印数据工作正常,但是当我尝试打印 data2 时,我得到一个空列表。为什么它会这样工作?为什么设置数据会与 data2 发生冲突?

【问题讨论】:

  • 文件中的内容以及您希望它如何存储在您的程序中?

标签: python python-2.7


【解决方案1】:

当你打开一个文件时,它会返回一个文件指针。这意味着您只能读取每行一次。使用read() 后,它会读取整个文件,将文件指针移动到末尾。然后,当您使用 readlines() 时,它会返回一个空列表,因为文件末尾没有任何行。

【讨论】:

    【解决方案2】:

    您已经使用file.read() 使用了迭代器,因此当您调用readlines 时没有任何东西可以使用,您需要在调用readlines 之前使用file.seek(0) 来重置指向文件开头的指针.

    with open('test.txt') as f: # with closes your files automatically
        data = f.read() 
        f.seek(0) # reset file pointer
        data2 = f.readlines() 
    

    【讨论】:

    • 有什么办法可以做到这一点,还是我必须关闭文件并重新打开它?
    • @ZeroFunter,别担心,我想这只是一些实验?
    【解决方案3】:

    设置data 并不会干扰data2。相反,它调用file.read() 干扰file.readlines()

    当您使用file = open('test.txt', 'r') 打开文件时,变量file 现在是指向文件的指针。

    因此,当您调用file.read()file.readlines() 时,它会移动指针file

    file.read() 将指针移动到文件的末尾,因此file.readlines() 不再需要读取。

    即使您将它们分配给不同的变量,它们最终还是依赖于file。因此,通过设置data,您修改了file,这会干扰您尝试设置data2

    【讨论】:

      【解决方案4】:

      为什么不拆分字符串而不是再次读取文件。

      file = open('test.txt', 'r')
      data = file.read()
      data2 = data.split('\n')
      

      【讨论】:

      • 不是我正在寻找的答案,因为我想知道为什么它会这样工作,但这肯定也能工作。
      猜你喜欢
      • 2020-06-17
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多