在文本文件中查找换行符

时间:2016-10-18 16:45:29

标签: python file newline

我的作业涉及创建尾部以查找文件中的最后K行。我们已经为此提供了缓冲区。现在,我正在尝试编写小东西并在文件中搜索"\n"个字符。我遇到了一些问题。在python我的代码中吐出 6 ,而python3则代码 0 。虽然文本文件比WAY更多。有人可以告诉我为什么这不符合我的意愿吗?

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")      

我想要做的是使用搜索在文件中向后搜索,并经常搜索新行字符,但这似乎对我不起作用。

3 个答案:

答案 0 :(得分:3)

for i in f:并没有按照您的想法行事。文件的默认迭代器为您提供lines,而不是characters。所以你说“整条生产线是否仅仅是回报?”

请尝试执行if i[-1] == "\n":,因为这表示“该行中的最后一个字符是换行符吗?”

您可能会注意到这一点很简单,因为每条“线”都以换行符结束,所以简单地计算一行就足够了。

如果你想遍历各个角色,我会这样做:

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

如果变量不符合您的想法,那么将变量命名为您认为的变量也有助于排除故障。

repl.it上的示例。变量名为linechar只是为了显示它们是什么,它们可以bananahenry同样容易,尽管那时不太清楚发生了什么。 raven为了此示例的目的模拟文件。

答案 1 :(得分:0)

更简单的方法是

  • 使用Python的内置功能将文件拆分为行列表
  • 从该列表的最后K个元素创建尾部

如果将整个文件保留在数组中是个问题,您可以逐行读取该文件,但只保留最后读取的K行,这样当您到达文件末尾时,您可以使用你想要的尾巴。

答案 2 :(得分:0)

为什么不简化逻辑并使用内置的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")