删除文件(如果存在);python

删除文件(如果存在);python,python,file-io,try-catch,Python,File Io,Try Catch,我想创建一个文件;如果它已经存在,我想删除它并重新创建。我试着这样做,但它抛出了一个Win32错误。我做错了什么 try: with open(os.path.expanduser('~') + '\Desktop\input.txt'): os.remove(os.path.expanduser('~') + '\Desktop\input.txt') f1 = open(os.path.expanduser('~') + '\Desktop\input

我想创建一个文件;如果它已经存在,我想删除它并重新创建。我试着这样做,但它抛出了一个Win32错误。我做错了什么

try:
    with open(os.path.expanduser('~') + '\Desktop\input.txt'):
        os.remove(os.path.expanduser('~') + '\Desktop\input.txt')
        f1 = open(os.path.expanduser('~') + '\Desktop\input.txt', 'a')
except IOError:
    f1 = open(os.path.expanduser('~') + '\Desktop\input.txt', 'a')

Windows不允许您删除打开的文件(除非使用异常共享选项打开)。您需要在删除它之前关闭它:

try:
    with open(os.path.expanduser('~') + '\Desktop\input.txt') as existing_file:
        existing_file.close()
        os.remove(os.path.expanduser('~') + '\Desktop\input.txt')

您可以在模式参数为'w'的情况下使用open。如果省略模式,则默认为“r”

with open(os.path.expanduser('~') + '\Desktop\input.txt', 'w')
w将文件截断为零长度或创建用于写入的文本文件。 流位于文件的开头


您试图在文件打开时删除该文件,您甚至不需要使用
删除该文件:

path = os.path.join(os.path.expanduser('~'), 'Desktop/input.txt')
with open(path, 'w'): as f:
    # do stuff

如果存在,则删除该文件。

您正在尝试删除打开的文件,并且状态的文档

在Windows上,尝试删除正在使用的文件会引发异常

您可以将代码更改为

filename = os.path.expanduser('~') + '\Desktop\input.txt'
try:
    os.remove(filename)
except OSError:
    pass
f1 = open(filename, 'a')
…或者你可以用…来代替所有这些

f1 = open(os.path.expanduser('~') + '\Desktop\input.txt', 'w')
…这将在打开前将文件截断为零长度。

请尝试以下操作:

 from os import path, 
    PATH = os.path.expanduser('~') + '\Desktop\input.txt'
    if path.isfile(PATH):
       try:
          os.remove(os.path.expanduser('~') + '\Desktop\input.txt')
       except OSError:
          pass
编辑:

from os import path, 
        PATH = os.path.expanduser('~') + '\Desktop\input.txt'
        try:
            os.remove(os.path.expanduser('~') + '\Desktop\input.txt')
        except OSError:
            pass

这是一个潜在的争用条件,在删除它之前检查
os.path.exists
,它可能是另一个程序正在对文件进行操作,并在
os.path.exists
计算为
True
后删除它。哦,是的,现在可以了,在我写了我的后,我意识到你可以使用
'w'
,但我以前有一个更安全的方法来做这件事:@Yui我不明白你说如果它存在,你想删除它。。。请更新您的问题,不要附加任何字符串。如果在启动脚本之前问题已经存在,我想将其删除。重新创建后,我有多个字符串连接到新文件潜在的竞争条件这里也没有竞争条件,但是
path.isfile(path)
已成为有效冗余谢谢,我认为这会使解决方案更安全。在这种情况下,我认为我的解决方案将与Aya完全相同。它不会使它比Aya的更安全。您的解决方案只进行两次检查,而不是一次检查,第一次检查根本无助于安全性,只有第二次检查