我正在尝试制作一个程序:
- 将保存在名为"class.txt"班级学生全称(一行一人) 然后我必须插入名称:
- Karamitsos Giorgos
- Patapoukas Dimitris
,然后关闭文件。
- 读取文件,只打印名字
以下是我的尝试:
f = open('class.txt','w')
l = ['karamitsos giorgos n', 'patapoukas dimitris n']
f.writelines(l)
f.close()
f1 = open('class.txt','r')
l2 = str(f1.readlines())
l3 = list(l2.split(" "))
print(l3,'n')
print(l3[1], l3[4])
f1.close()
几点观察:
- 输出文件应该使用模式'a'打开,而不是擦除任何旧文件的内容,而是将新数据附加到末尾。
- 通过使用上下文管理器打开文件,例如
with open('class.txt', 'a') as f:
,当with
块退出时,文件将自动关闭。 - 方法
readlines
将一次将整个文件读入内存。如果文件有兆字节的数据怎么办?你应该逐行迭代地读取文件。 - 您可以使用
print
向文件添加其他名称。默认情况下,无论打印什么,都会在末尾添加一个换行符。
with open('class.txt','a') as f:
for name in ('karamitsos giorgos', 'patapoukas dimitris'):
print(name, file=f)
with open('class.txt', 'r') as f:
for name in f:
name_parts = name.strip().split(' ')
print(name_parts[0])
但是,您可以通过在追加和读取时打开文件一次来避免打开和关闭文件两次:
with open('class.txt','a+') as f:
for name in ('karamitsos giorgos', 'patapoukas dimitris'):
print(name, file=f)
# Seek to beginning of the file:
f.seek(0, 0)
for name in f:
name_parts = name.strip().split(' ')
print(name_parts[0])