Python 在文本文件中查找新行字符

Python 在文本文件中查找新行字符,python,file,newline,Python,File,Newline,我有一个作业,涉及创建一个尾部来查找文件中最后的K行。我们已经得到了一个用于此的缓冲区。现在,我正在尝试编写一些小东西,并在文件中搜索“\n”字符。我遇到了一些问题。在python中,我的代码吐回6,而在python3中,它是0。不过,文本文件的作用远不止这些。有人能告诉我为什么这不是我想要的吗 def new(): try: f = open("test.txt", "r") count = 0 for i in f:

我有一个作业,涉及创建一个尾部来查找文件中最后的
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在文件中向后搜索,并经常搜索新行字符,但这对我来说似乎根本不起作用

对于f中的i:
并没有做你认为应该做的事情。文件的默认迭代器为您提供
,而不是
字符
。你是说“整条线是否只等于一个回报?”

如果i[-1]==“\n”:,请尝试执行
,因为这会说“行中的最后一个字符是换行符吗?”

您可能会注意到这一点非常正确,因为每一行都以换行符结尾,因此只需计算行数就足够了


如果要遍历单个字符,我将执行以下操作:

for line in file:
    for char in line:
        dostuff()
如果变量最终与您的想法不符,那么按照您的想法命名变量也将有助于解决问题



举个例子。这些变量被命名为
line
char
,只是为了显示它们是什么,它们可以是
banana
henry
,同样容易,尽管那时发生的事情不太清楚
raven
出于本例的目的模拟文件。

更简单的方法是

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

如果将整个文件保存在一个数组中是一个问题,那么您可以逐行读取文件,但只保留最后读取的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")

for i in f
迭代文件中的行,而不是字符。@Gator\u谢谢。我认为for循环将迭代文件中的每个字符。谢谢。作业通常要求你自己做->如果你回传一行列表理解,他们可能(正确地)认为他不是自己写的,即使这是我的默认方法。@TemporalWolf是正确的,我们只能使用我们所学的,即使我们知道的比这更多。我确实喜欢这种方法,但我会记住这一点。谢谢你的回复。我之所以编写函数new(),只是因为我在将它添加到代码中并给它起一个类似GetCharacters()之类的函数名之前,一直在尝试测试它。谢谢。我想当你遍历一个文件时,它会遍历该文件中的每个字符。-1指数发挥了巨大的作用。是否有这样一种方法可以遍历每个字符,或者您需要执行类似open(,“rb”)的操作来读取位?@DirtyDaver我更新了它,以包括如何扫描文件中的字符。因此,语言中内置了“char”,允许我一次迭代1个字符?@DirtyDaver否,我把它命名为char,因为这就是它所代表的
line
是一个字符串,在python中,如果在字符串中为george执行
操作,则每个循环
george
都将有一个字符。这就是y中x的
如何处理文件和字符串。