编写新线路时如何删除旧线



我有一个读取2个文件的程序。如果db.csv中的数字大于log.csv中的数字,请用较大的数字替换log.csv中的数字。否则,什么都不做。

我的代码问题是未更换较小的数字。较大的数字被写入文件,但较小的数字正在附加到第二行。我希望删除较小的数字。

这是我的代码实际上有效的:

import time
import os
def locate():
    while True:
        time.sleep(8)
        try:
            with open("log.csv", "rb") as f:  # Open local log for read
                for number in f:
                    log_number = number
                    with open("db.csv", "rb") as f2:  # Open db for write
                        # Will read database here
                        for first_line in f2:
                            db_number = first_line
                            if db_number > log_number:
                                print ("We have a new winner!")
                                with open("log.csv", "wb") as f:  # Open local log for write
                                    f.write(db_number)
                                    break
                            else:
                                print ("Number is the same.")
                                break
        except OSError as e:
            print (e)
            break
locate()

当我尝试将打开(" log.csv"(保持在1行时,我的问题就会发生。例如:

import time
import os
def locate():
    while True:
        time.sleep(8)
        try:
            with open("log.csv", "rb+") as f:  # Open local log for read
                for number in f:
                    log_number = number
                    with open("db.csv", "rb") as f2:  # Open db for write
                        # Will read database here
                        for first_line in f2:
                            db_number = first_line
                            if db_number > log_number:
                                print ("We have a new winner!")
                                f.truncate()  # trying to remove the old number
                                f.write(db_number)
                                break
                            else:
                                print ("Number is the same.")
                                break
        except OSError as e:
            print (e)
            break
locate()

如何从log.csv?

正确删除旧的(较小(数字

旧数字写入第2行。

如何从log.csv?

正确删除旧的(较小(数字

您写了任何东西后,您真的做不到。

那不是文件的工作方式!

文件确实只是一个连续的字节数组。您不能"在中间删除一些"。

您需要做的是在要删除行之前和之后复制所有行。

truncate()将删除所有内容 您刚刚读取的行(这是当时文件指针所在的位置(。您需要计算该行的长度,并执行类似f.truncate(f.tell()-lastlinelength)的操作。但是您之后会失去一切!我真的不认为您想要truncate做什么。

总的来说,您似乎需要修改几个数字。只需在RAM中保留整个条目列表,然后在阅读整个日志后将其写出即可。

最新更新