在文本fi中查找新行字符

2024-04-25 08:41:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任务,需要创建一个tail来查找文件中最后的K行。我们已经得到了一个缓冲区。目前,我正在尝试编写一些小东西,并在文件中搜索"\n"字符。我遇到了一些问题。在python中,我的代码回吐6,在python3中,它是a0。不过,文本文件的功能远不止这些。有人能告诉我为什么我不想这样做吗?

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向后搜索,并经常搜索新行字符,但这似乎对我都不起作用。


Tags: 文件代码test功能newdefcountopen
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在本例中模拟文件。

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

更简单的方法是

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

如果将整个文件保存在一个数组中是一个问题,那么您可以逐行读取文件,但只保留最后读取的K行,这样当您到达文件的末尾时,就可以得到所需的尾部。

相关问题 更多 >