我有一个程序可以读取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行。
答案 0 :(得分:1)
在你之后写完任何东西之后,你真的无法做到。如何从log.csv中正确删除旧的(较小的)号码?
这不是文件的工作方式!
文件实际上只是一个连续的字节数组。你不能在中间删除一些"。
您需要做的是复制要删除的行之前和之后的所有行。
JOINing
将在您刚读过的行之后删除所有内容(那时文件指针所在的位置)。您需要计算该行的长度,并执行truncate()
之类的操作。但是你以后会失去一切!我真的不认为你想要f.truncate(f.tell()-lastlinelength)
做什么。
总而言之,您似乎需要修改几个数字。只需将整个条目列表保存在RAM中,并在读完整个日志并进行处理后将其写出来。