我想删除一个文件。该文件是由我想要删除它的同一程序创建的。
这就是我所拥有的:
USER_FILE_NAME = 'user_info.json'
file_to_delete = os.path.join(ADDON_DATA['profile_dir'], USER_FILE_NAME)
xbmc.log('File to delete:')
print(file_to_delete)
os.remove(file_to_delete)
这就是我得到的(由于偏执倾向,用户名和喜欢的内容被编辑):
NOTICE: File to delete:
NOTICE: C:\Users\USERNAME\AppData\Roaming\XBMC\userdata\addon_data\script.NAME\user_info.json
NOTICE: [Errno 2] No such file or directory: u'C:\\Users\\USERNAME\\AppData\\Roaming\\XBMC\\userdata\\addon_data\\script.NAME\\user_info.json'
我认为这是因为那些该死的斜线。我尝试了各种各样的东西,但似乎没有任何作用。无论我对file_to_delete
中的字符串做了什么,包括但实际上不限于用正斜杠替换反斜杠,它尝试查找和删除的文件总是与错误行中的相同。
任何人都可以帮助我吗?
更新
所以我尝试了一些东西。我在原os.remove(repr(file_to_delete))
之后添加了os.remove(file_to_delete)
,所以我现在有了这个:
if os.path.exists(file_to_delete):
xbmc.log('User file exists, Prepairing to delete')
xbmc.log('stats: %s' % os.access(file_to_delete, os.F_OK))
xbmc.log('stats: %s' % os.access(file_to_delete, os.W_OK))
xbmc.log('stats: %s' % os.access(file_to_delete, os.X_OK))
os.remove(file_to_delete)
os.remove(repr(file_to_delete))
如果我发表评论os.remove(repr(file_to_delete))
,我会收到与以前相同的错误。
如果我不评论那个,但做了上面的那个,我得到这个错误:
User file exists, Prepairing to delete
stats: True
Previous line repeats 2 times.
ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
.
.
.
os.remove(repr(file_to_delete))
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: "u'C:\\\\Users\\\\USERNAME\\\\AppData\\\\Roaming\\\\XBMC\\\\userdata\\\\addon_data\\\\script.NAME\\\\user_info.json'"
如果我没有评论任何一个并且像它一样运行,我得到与上面相同的错误,但文件被删除。关于为什么会发生这种情况的任何想法?
更新2:
上面的行为也发生在这个例子中:
os.remove(file_to_delete)
os.remove(file_to_delete)
文件已删除,但收到错误:
WindowsError: [Error 2] The system cannot find the file specified: u'C:\\Users\\USERNAME\\AppData\\Roaming\\XBMC\\userdata\\addon_data\\script.NAME\\user_info.json'
当我将os.remove()
与同一文件夹中的不同文件一起使用时,两次都使用os.path.join()
构建,一次就够了。
有什么想法吗?
答案 0 :(得分:0)
文件名字符串似乎被编码为unicode字符串。
也许试试这个:
file_to_delete= unicodedata.normalize('NFKD', file_to_delete).encode('ascii','ignore')
os.remove(file_to_delete)
答案 1 :(得分:0)
好吧,好像我发现了问题。我将time.sleep(2)
放在os.remove(file_to_delete)
之后,然后就可以了。