16

我想创建一个文件;如果它已经存在,我想删除它并重新创建它。我试过这样做,但它会引发 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')
4

5 回答 5

38

您正在尝试删除打开的文件,以及os.remove()状态文档...

在 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')

...这将在打开之前将文件截断为零长度。

于 2013-04-23T11:25:44.953 回答
3

您试图在文件打开时删除它,您甚至不需要在with那里删除它:

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

如果存在则删除

于 2013-04-23T11:24:37.517 回答
2

您可以将 open 与 mode 参数 = 'w' 一起使用。如果省略 mode,则默认为 'r'。

with open(os.path.expanduser('~') + '\Desktop\input.txt', 'w')

w 将文件截断为零长度或创建文本文件以进行写入。流位于文件的开头。

于 2013-04-23T11:22:56.013 回答
1

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

try:
    with open(os.path.expanduser('~') + '\Desktop\input.txt') as existing_file:
        existing_file.close()
        os.remove(os.path.expanduser('~') + '\Desktop\input.txt')
于 2013-04-23T11:22:26.527 回答
1

尝试这个:

 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
于 2013-04-23T11:26:32.860 回答