为什么这段代码运行后student.txt文件直接清空了
时间: 2023-10-02 18:14:00 浏览: 53
原因在于,当你以写模式('w')打开一个文件时,会覆盖该文件的全部内容。在这个函数中,当你打开 student.txt 文件时,使用的是写模式。因此,当你从文件中读取行时,将其写入新文件的同时,将原文件清空。
为了解决这个问题,你可以将每行读取到内存中,然后将所需的行写入新文件。在所有行处理完毕后,将新文件重命名为原文件名,以覆盖原文件。这样就可以在不清空原文件的情况下从中删除指定的行。
以下是修改后的代码:
```python
import os
def delete():
while True:
x = 0
with open("D:\\python实践学生管理\\student.txt", 'r', encoding='UTF-8') as f:
lines = f.readlines()
with open("D:\\python实践学生管理\\student.tmp", 'w', encoding='UTF-8') as f:
deletenumber = input("请输入所需删除学生的学号:")
for line in lines:
if deletenumber in line:
x += 1
else:
f.write(line)
if x == 0:
print("没有该学号对应学生,请确认后重试")
else:
print("学号为 {} 的学生信息已被删除".format(deletenumber))
os.remove("D:\\python实践学生管理\\student.txt")
os.rename("D:\\python实践学生管理\\student.tmp", "D:\\python实践学生管理\\student.txt")
break
```
这个版本的代码先读取所有行,然后写入一个新的临时文件,只有不匹配所需删除学生学号的行才会被写入。在所有行被处理后,原文件被删除,临时文件被重命名为原文件名,从而达到了删除指定行的目的。