如何在 python 中迭代 readlines()

How to Iterate over readlines() in python

我正在尝试将 txt 文件中的行添加到 python 列表以进行迭代,脚本想要打印每一行并 return 一个错误。我正在使用 readlines() 函数,但是当我使用 list.remove(lines) 时,它 return 是一个错误:File "quotes.py", line 20, in main list.remove(lines) TypeError: remove() takes exactly one argument (0 given).

def main():
while True:
    try:
        text_file = open("childrens-catechism.txt", "r")
        lines = text_file.readlines()
        #    print lines
        #    print len(lines)
        if len(lines) > 0:
            print lines
            list.remove(lines)
            time.sleep(60)
        else:
            print "No more lines!"
        break
        text_file.close()

我看不出我做错了什么。我知道它与 list.remove() 有关。提前谢谢你。

lines 是您的 txt 中的列表。文件,并且 list.remove(lines) 语法不正确,您试图删除列表中的列表。 list 是 Python 中的函数。您可以删除 lines 中的元素,例如;

del lines[0]
del lines[1]
...

lines.remove("something")

逻辑是,remove()是删除列表中的一个元素,你必须在remove()之前写那个列表然后你必须在括号中写你想删除的东西remove() 函数。

可以这样写。它将为您节省一些时间并提高效率。

import time
def main():
    with open("childrens-catechism.txt", "r") as file:
        for line in file:
            print line,
            time.sleep(60)

根据您的要求尝试此操作,这将满足您的需要。

import time
def main():
    with open("childrens-catechism.txt", "r") as file:
        for lines in file.readlines():
            if len(lines) > 0:
                for line in lines:
                    print line
                    lines.remove(line)
            else:
                print "No more lines to remove"
            time.sleep(60)

打开文件时,我们可以将文件行转换为列表,

lines = list(open("childrens-catechism.txt", "r"))

我们现在可以从此列表中删除长度大于零的条目,如下所示,

for line in lines:
    if len(line) > 0:
            # do sth
            lines.remove(line)

如果您尝试从文件中读取所有行,然后按顺序打印它们,然后在打印后删除它们,我会推荐这种方法:

    import time

    try:
        file = open("childrens-catechism.txt")
        lines = file.readlines()

        while len(lines) != 0:
            print lines[0],
            lines.remove(lines[0])
            time.sleep(60)
    except IOError:
        print 'No such file in directory'

这将打印第一行,然后将其删除。当删除第一个值时,列表向上移动一个,使上一行 (lines[1]) 成为列表的新起点,即 lines[0].

已编辑:

如果您想从文件和行列表中删除该行,您必须这样做:

    import time

    try:
        file = open("childrens-catechism.txt", 'r+')  #open the file for reading and writing
        lines = file.readlines()

        while len(lines) != 0:
            print lines[0],
            lines.remove(lines[0])
            time.sleep(60)

        file.truncate(0) #this truncates the file to 0 bytes
    except IOError:
        print 'No such file in directory'

至于逐行从文件中删除行,我不太确定这是否可行或有效。