在文本文件中查找换行符

finding new line characters in a text file

我的作业涉及创建尾部以查找文件中的最后 K 行。我们已经获得了用于此目的的缓冲区。现在,我正在尝试编写一些小东西并在文件中搜索 "\n" 个字符。我 运行 遇到了一些问题。在 python 中,我的代码返回 6,在 python3 中返回 0。文本文件的内容远不止于此。有人可以告诉我为什么这不能像我想要的那样工作吗?

def new():
    try:
        f = open("test.txt", "r")
        count = 0
        for i in f:
            if i == "\n":
                count = count + 1
        return count
        f.close()
    except(FileNotFoundError):
        print("No file")      

我想做的是使用 seek 在文件中向后移动,并且时不时地搜索换行符,但这似乎对我不起作用。

for i in f: 并没有按照您的想法行事。文件的默认迭代器为您提供 lines,而不是 characters。所以你说 "Does the entire line equal just a return?"

尝试按照 "Is the last character in the line a newline?"

中所说的 if i[-1] == "\n":

您可能会注意到这是微不足道的事实,因为每个 "line" 都以换行符结束,所以简单地计算行数就足够了。


如果你想遍历单个字符,我会这样做:

for line in file:
    for char in line:
        dostuff()

按照您的想法命名变量,如果它们最终不是您所想的那样,也有助于排除故障。


repl.it 上的示例。变量被命名为 linechar 只是为了显示它们是什么,它们可以是 bananahenry 一样容易,尽管这样就不太清楚发生了什么. raven 为本示例模拟一个文件。

一个更简单的方法是

  • 使用 Python 的 built-in 功能将文件拆分为行列表
  • 根据该列表的最后 K 个元素创建你的尾巴

如果将整个文件保存在一个数组中是个问题,您可以改为读取文件 line-by-line,但只保留读取的最后 K 行,这样当您到达文件末尾时,您有你想要的尾巴。

为什么不简化逻辑并使用 Python 内置?

def new(): # not a good function name!
    try:
        with open('data1.txt') as f:
            return f.read().count('\n')
    except FileNotFoundError:
        print ("No file")