如何编写文件然后删除它

How to write a file and then delete it

提问人:Patrick 提问时间:8/31/2023 更新时间:8/31/2023 访问量:54

问:

我是一名 C# 程序员,现在需要使用 python。到目前为止,这是我的第二天。 我需要编写一个文件,读取它,然后删除它。 在 C# 中,这很容易。

string strPath = @"C:\temp\test.txt";
using (StreamWriter writer = new StreamWriter(strPath))
{ writer.WriteLine("XYZ");}

string readText = File.ReadAllText(strPath);

File.Delete(strPath);

流由 using

在python中,我想到了这个:

with open(strPath, "xt") as f:
    f.write("XYZ")
f.close()

f = open(strPath, "r")
strReadFile = f.read()

os.remove(strPath)

但尽我所能,我仍然收到错误,告诉我该文件正在使用中。 因此,我用谷歌搜索:“Python 写入、读取和删除文件”,但没有任何结果

谢谢 帕特里克

python 文件 读取文件 delete-file writefile

评论

1赞 Codist 8/31/2023
使用上下文管理器(第一个代码片段)时,不要调用 close。在尝试删除文件(第二个片段)之前调用 close。请注意,行为因操作系统而异

答:

1赞 Antoine 8/31/2023 #1

在第二个示例中,您需要手动关闭文件,在第一个示例中,上下文处理程序会为您完成此操作。with

with open(strPath, "xt") as f:
    f.write("XYZ")

f = open(strPath, "r")
strReadFile = f.read()
f.close()

os.remove(strPath)

两种方式都是有效的。

评论

3赞 B Remmelzwaal 8/31/2023
也可以在读取部分使用上下文处理程序。
0赞 Patrick 8/31/2023
有没有办法更改打开,以便 f.write 可以覆盖文件(如果存在),而不必在 if (file.存在)File.delete ?我知道上面描述的临时文件解决方案会起作用,但我会坚持使用固定文件
2赞 Codist 8/31/2023
@Patrick 只需使用模式“w”打开即可
1赞 Codist 8/31/2023 #2

这里的问题是,如果文件在某个进程中打开,Windows 不会允许您删除文件(或标记为准备删除)。Unix 类型的系统将允许您执行此操作。

这里有两段代码。第一个将在(例如)macOS上运行。第二个将在 Windows 上运行,因此是跨平台兼容的变体。

import os

F = 'foo.txt'

with open(F, 'x') as foo:
    foo.write('I am Foo')

with open(F) as foo:
    print(foo.read())
    os.remove(F)

import os

F = 'foo.txt'

with open(F, 'x') as foo:
    foo.write('I am Foo')

with open(F) as foo:
    print(foo.read())

os.remove(F)
1赞 AFRobertson 8/31/2023 #3

另一种方法是使用标准库中的 tempfile

from tempfile import TemporaryFile

with TemporaryFile() as f:
    f.write("XYZ")
    f.seek(0)
    str_read_file = f.read()

此上下文管理器在上下文之后关闭并删除临时文件。