5/5 - (1票)
问题的提出和解决方案概述
在这篇文章中,你将学习如何用Python擦除一个文件的内容。
为了使它更有趣,我们有以下的运行场景。
假设你有一个Python脚本,检索五(5)家科技公司的每日股票交易价格,并将其保存到prices.txt 。为了确保没有错误,你想在保存最新数据之前擦除这个文件的内容。
问题是。我们如何编写代码来擦除文件的内容?
我们可以通过以下方法之一来完成这项任务。
- 方法1:使用
open()和truncate(0) - 方法2:使用
open(),[seek(0)](https://blog.finxter.com/how-to-modify-a-text-file-in-python/)和truncate(0) - 方法3:使用
with open() - 方法4:使用
open()和close()在一个行上 - 奖励:提取字符并擦除剩余部分
准备工作
为了跟上进度,复制、粘贴并保存下面的文本到 prices.txt 。把这个文件移到当前工作目录中。
| AAPL,138. 22MMSF,255. 67HPE,14. 51DELL,14. 51MNDT,21.89 |
方法1:使用open()和truncate()
这种方法是在不删除文件本身的情况下清除文件的内容,使用 open()和 truncate(0).
fp = open('prices.txt', 'w')
fp.truncate(0)
fp.close()
这段代码在写模式下打开prices.txt (w),并将输出保存到fp ,这就创建了一个类似于下面输出的文件对象。
<_io.TextIOWrapper name='prices.txt' mode='w' encoding='cp1252'> |
**提示。**只要在Python中打开一个文件,就会返回一个文件对象。这个对象允许访问处理/操纵打开的文件。
接下来,fp.truncate(0) 被调用。这个方法将上述文件的大小调整到指定的字节数。如果没有传递参数,则使用当前的文件位置。
最后,调用fp.close() 来关闭打开的文件。
如果这段代码是成功的,一个空的prices.txt 文件现在驻留在当前工作目录中。
方法2:使用open(), seek(0) 和 truncate(0)
该方法打开/重新打开一个文件,并在不删除文件本身的情况下,用 和 擦除其内容。 open(), [seek()](https://blog.finxter.com/how-to-modify-a-text-file-in-python/)和 truncate(0).
fp = open('prices.txt', 'r+')
fp.seek(0)
fp.truncate()
这段代码在读/写模式下打开/重新打开prices.txt 文件(r+),并将输出保存到fp ,该文件创建了一个类似于上面输出的文件对象。
接下来,调用fp.seek(0) ,将文件指针(fp)重新定位到文件中的一个给定位置。在本例中,该位置是0 (文件的顶部)。
然后,调用fp.truncate(0) 。该方法将所述文件的大小调整为指定的字节数。如果没有传递参数,则使用当前文件的位置。
如果这段代码是成功的,一个空的prices.txt 文件现在驻留在当前工作目录中。
方法3:与open()一起使用
该方法在不删除文件本身的情况下,用 、 和 删除文件的内容。 `[with open()](https://docs.python.org/3/library/functions.html)`在单行上!
with open('prices.txt', 'w'): pass
这段代码调用 [with open()](https://docs.python.org/3/library/functions.html)来打开prices.txt ,以便写入(w )。然后,执行pass 语句,该语句不做任何事情,文件自动关闭。
提示:
pass 语句是作为一个占位符使用的。当pass 执行时,什么也不会发生。当预期有代码,但不需要代码时,这是必要的。
如果这段代码是成功的,一个空的prices.txt 文件现在驻留在当前工作目录中。
方法4:在一行中使用open()和close()
这也是一个很好的选择,这个方法打开一个文件进行写入 ([open()](https://docs.python.org/3/library/functions.html))并关闭该文件(close()),只用了一行代码!
open('prices.txt', 'w').close()
这段代码使用 [open()](https://docs.python.org/3/library/functions.html)来打开prices.txt ,以供写入(w )。由于没有调用其他代码,文件内容被擦除,并且文件关闭(close()).
如果这段代码是成功的,一个空的prices.txt 文件现在驻留在当前工作目录中。
奖励:在指定的位置后擦除文件内容
如果你想擦除文件中前x个字符后的所有内容并返回相同的内容,会发生什么?
import os
fp = os.open('prices.txt', os.O_RDWR|os.O_CREAT)
os.ftruncate(fp, 4)
os.lseek(fp, 0, 0)
str = os.read(fp, 100).decode('utf-8')
print(f"Read String is : {str}")
os.close(fp)
这个例子可以用于擦除文件的全部内容。然而,让我们从prices.txt (AAPL)中检索前四(4)个字符,并擦除其余部分。
首先,这段代码在 os库来访问许多可用于与操作系统交互的功能。
然后,在读/写模式下打开prices.txt ,如果文件不存在,或者失败,就创建一个新文件(os.O_RDWR|os.O_CREAT))。
然后,文件被截断为4个字节/字符(os.ftruncate(fp, 4)),文件指针(fp)移动到文件的顶部(os.lseek(fp, 0, 0))。
接下来,代码读入上述前四(4)个字节/字符,对输出进行解码(os.read(fp, 100).decode('utf-8')),并保存到str 。
输出被发送到终端,并关闭文件。
输出
Read String is: AAPL |
总结
这四(4)种如何删除文件内容的方法应该给你足够的信息来选择最适合你编码要求的方法。
祝您好运,编码愉快!
幽默的程序员
*这个世界上只有10种人:知道二进制的人和不知道的人。
~~~
世界上有10种人。懂三进制的,不懂三进制的,还有把它误认为二进制的。*