0

我正在尝试使用 fileinput 模块对文件进行就地编辑,但它似乎不想工作。

我正在使用的代码:

for line in fileinput.FileInput(complaint_db, inplace=True, backup=(complaint_db + ".backup")):
            print("Started replacement")
            if line == myline:
                pass
            else:
                print(line)

修改了备份参数,因为我认为它可能会修复错误,但它没有。该文件在我运行此命令之前不存在(我已经检查了一百次),之后也不存在。我正在我的主目录中创建文件,所以应该没有错误。

这是完整的错误:

builtins.PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'c:\\Users\\Cody\\Documents\\ComplaintManagement\\complaints.dbc:\\Users\\Cody\\Documents\\ComplaintManagement\\complaints.db.backup'

我想另一个问题是,我如何检查原始的投诉.db 是否在文件中的某个位置打开而不知道它可能在哪里打开。如果是这样,我可以从代码中的任何位置随意关闭它吗?

我不能执行 f.close ,因为此时代码中不会定义 f 。我试过 os.close(complaint_db) (complaint_db 是一个保存数据库位置的通用变量)。它不起作用,因为它需要一个 int,所以我现在有点迷路了。

4

1 回答 1

1

我通过使用不同形式的更改数据库来解决此问题。而不是 fileinput,我将其更改为以下代码:

from shutil import move
def RemoveClaim(self, myline):
     ocdb = open(complaint_db, 'r')
     ncdb = open(complaint_db + "2", 'w')
     for line in ocdb:
         if line == myline:
             pass
         else:
             ncdb.write(line)
     ocdb.close()
     ncdb.close()
     move(complaint_db + "2", complaint_db)

这似乎解决了我的问题,因为它有效,而且我没有错误。

于 2014-04-01T18:09:01.520 回答