如何在写新行时删除旧行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在写新行时删除旧行?相关的知识,希望对你有一定的参考价值。
我有一个程序可以读取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()
当我尝试将open(“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中,并在读完整个日志后将其写出来并进行处理。
以上是关于如何在写新行时删除旧行?的主要内容,如果未能解决你的问题,请参考以下文章