由于斜杠,os.remove无法找到文件

时间:2014-06-03 16:44:37

标签: python xbmc

我想删除一个文件。该文件是由我想要删除它的同一程序创建的。

这就是我所拥有的:

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()构建,一次就够了。

有什么想法吗?

2 个答案:

答案 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)之后,然后就可以了。