【问题标题】:Reading files to list of strings in Python将文件读取到 Python 中的字符串列表
【发布时间】:2010-07-07 22:21:13
【问题描述】:

当你在 Python 中使用 fileName.readlines() 函数时,列表中是否包含文件结尾的符号?

例如,如果文件被读入一个字符串列表并且最后一行是'End',那么列表中是否会有另一个地方带有一个符号表示文件的结尾?

谢谢。

【问题讨论】:

  • 测试自己有多难?
  • 也许您应该退后一步,首先检查列表在 python 中的工作方式。列表绝对没有必要包含表明您已结束的项目。

标签: python list file


【解决方案1】:

不,列表包含文件中每一行的一个元素。

您可以对 for 中的每一行执行一些操作,如下所示:

lines = infile.readlines()
for line in lines:
    # Do something with this line
    process(line)

Python 有一种更短的方法来完成此操作,避免一次将整个文件读入内存

for line in infile:
    # Do something with this line
    process(line)

如果你只想要文件的最后一行

lines = infile.readlines()
last_line = lines[-1]

为什么你认为最后需要一个特殊符号?

【讨论】:

    【解决方案2】:

    .readlines() 返回的列表与任何其他 Python 列表一样,没有“结束”标记——假设例如你从L = myfile.readlines()开始,你可以看到L有多少项目len(L),用L[-1]得到最后一个,用for item in L:一个接一个地循环所有项目,等等......再次 - 就像任何其他列表一样。

    如果出于某种特殊原因,您希望在最后一行之后添加一些特殊的“哨兵”值,例如,您可以使用L.append('') 来添加这样的哨兵或标记——空字符串永远不会是任何其他行的值(因为每个项目都是包含尾随 '\n' 的完整行,所以它永远不会是空字符串!)。

    您可以使用其他任意标记,例如None,但通常它更简单,如果可行[[在这种情况下显然可行,正如我刚刚展示的]],如果哨兵完全相同键入任何其他项目。这取决于你正在做的处理需要一个过去的“哨兵”(我不会猜测,因为你没有给我们任何指示,而且只有相对罕见的问题最好在 Python 中以这种方式解决,无论如何; -),但在几乎所有可以想到的哨兵情况下,使用'' 哨兵就可以了。

    【讨论】:

      【解决方案3】:

      它只是返回一个包含每一行的列表——列表中没有“EOF”项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多