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'
答案 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()
行。
您应该在尝试重命名之前关闭该文件。该错误是因为您的程序实际上正在使用它尝试重命名的文件。