我有一个读取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中保留整个条目列表,然后在阅读整个日志后将其写出即可。