写入文件错误和权限错误

时间:2016-03-06 14:22:26

标签: python python-3.x

while True:
    try:
        enterName = input("Enter the name of the file:") + ".txt"

    latinFile = open(enterName,"r")
    read = latinFile.readlines()
    for lines in read:  
        store.append(lines.strip()) 
    checkSquare (store) 
    print ("File:")
    for content in store:
        print (content)

    saveData(store)

我认为问题在于保存文件内容的代码。 目的是让代码打开文件,读取内容并检查文件的格式是否正确等等,然后如果这是真的并且有效,它将再次保存文件(saveData)但它将重命名该文件,使其在目录中说明已经过验证。

然而,代码不起作用(os.rename部分),而且我一直得到一个permissionerror,我不知道如何解决它。

错误讯息:

Traceback (most recent call last):
  File "C:\Users\---\Desktop\python\idkll.py", line 44,in <module>
    saveData(store)
  File "C:\Users\---\Desktop\python\idkll.py", line 18, in saveData
    os.rename (fileName,"VALIDATED" + fileName)
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'OPENEDve.txt'

2 个答案:

答案 0 :(得分:2)

您应该在完成阅读或写入文件后立即关闭文件。您应该在尝试重命名之前关闭该文件。您可以使用文件的.close()方法,也可以使用with语句,以便自动关闭文件。

顺便提一下,您的saveData()函数可能不会提示用户输入文件名:只需将enterName中已有的名称传递给用户即可。此外,在文件名前加"VALIDATED"不是一个好策略。如果您只是在当前目录中使用相对文件名,那就没关系,但它会使一个正确的文件路径混乱。

响应更新:

saveFile 包含文件名字符串,它是表示打开文件的Python对象(也称为文件句柄)。该文件的名称是enterName中的字符串。所以你需要做一些像

这样的事情
os.rename(enterName, enterName + "VALIDATED")

答案 1 :(得分:0)

只需在saveData()函数中交换os.rename (fileName,"VALIDATED" + fileName)file.close()行。 您应该在尝试重命名之前关闭该文件。该错误是因为您的程序实际上正在使用它尝试重命名的文件。