编写一个带缓存的对文本文件进行读写操作的程序。 (1)可以读取不同位置的信息 (2)可以把数据写入到不同的位置 例如:创建一个学生类(含姓名,性别,年龄等信息),从键盘上输入学生信息,把学生对象保存在指定文本文件中的指定位置。从文本文件中读取特定学生信息。实现学生信息的增加、删除、修改、插入等操作。
时间: 2024-02-06 09:09:39 浏览: 25
以下是一个简单的带缓存的对文本文件进行读写操作的程序,具体实现了题目中所要求的功能:
```python
import os
import pickle
class Student:
def __init__(self, name, gender, age):
self.name = name
self.gender = gender
self.age = age
class FileCache:
def __init__(self, file_name):
self.file_name = file_name
self.cache = {}
def read(self, pos):
if pos in self.cache:
return self.cache[pos]
with open(self.file_name, 'rb') as f:
f.seek(pos)
obj = pickle.load(f)
self.cache[pos] = obj
return obj
def write(self, pos, obj):
with open(self.file_name, 'r+b') as f:
f.seek(pos)
pickle.dump(obj, f)
self.cache[pos] = obj
def append(self, obj):
with open(self.file_name, 'ab') as f:
pos = f.tell()
pickle.dump(obj, f)
self.cache[pos] = obj
def delete(self, pos):
if pos in self.cache:
del self.cache[pos]
with open(self.file_name, 'r+b') as f:
f.seek(pos)
f.truncate()
def insert(self, pos, obj):
# 先将 pos 后面的数据往后移动一个 obj 的大小
with open(self.file_name, 'r+b') as f:
f.seek(pos, os.SEEK_END)
end_pos = f.tell()
f.seek(end_pos)
while end_pos >= pos:
end_pos -= 1
f.seek(end_pos)
byte = f.read(1)
f.seek(end_pos + obj_size)
f.write(byte)
f.seek(end_pos)
# 插入新的 obj
pickle.dump(obj, f)
self.cache[pos] = obj
if __name__ == '__main__':
file_cache = FileCache('students.txt')
# 添加学生信息
student1 = Student(name='张三', gender='男', age=18)
file_cache.append(student1)
student2 = Student(name='李四', gender='女', age=19)
file_cache.append(student2)
# 读取学生信息
student1_from_file = file_cache.read(0)
print(student1_from_file.name) # 输出:张三
# 修改学生信息
student1_from_file.age = 20
file_cache.write(0, student1_from_file)
# 删除学生信息
file_cache.delete(0)
# 插入学生信息
student3 = Student(name='王五', gender='女', age=20)
file_cache.insert(0, student3)
```
在上面的代码中,我们首先定义了一个 `Student` 类来表示学生信息,然后定义了一个 `FileCache` 类来实现对文件的缓存操作。在 `FileCache` 类中,我们维护了一个 `cache` 字典来保存已经读取的对象,从而避免重复读取文件。在读取一个对象时,我们首先判断该对象是否已经在缓存中,如果是,则直接返回缓存中的对象;否则,我们从文件中读取该对象,并将其保存到缓存中。在写入、追加、删除、插入对象时,我们都需要更新缓存中的数据。
在上面的代码中,我们实现了题目中所要求的以下功能:
1. 可以读取不同位置的信息:通过 `FileCache` 类的 `read` 方法,我们可以读取文件中指定位置的对象。
2. 可以把数据写入到不同的位置:通过 `FileCache` 类的 `write` 方法,我们可以将一个对象写入到文件中指定位置。
3. 实现学生信息的增加、删除、修改、插入等操作:通过 `FileCache` 类的 `append`、`delete`、`write`、`insert` 方法,我们可以实现对学生信息的增加、删除、修改、插入等操作。
需要注意的是,上面的代码实现中使用了 Python 的 `pickle` 模块来序列化和反序列化对象,这里假设学生信息对象可以被序列化为一个字节流。在实际应用中,我们可能需要根据具体的需求来选择序列化方式。