有趣的是,我在这个网站上发现了这个确切的问题 - 完全相同的家庭作业问题 - 但由于关于问题的信息不足,从未达成结论。希望我能有更好的运气。
我正在处理我的Python 3作业,而且我遇到了一个我正在努力解决的问题。
给出的确切提示是:
"您将被传递文件名' P',名字' F',姓氏' L', 和一个新的生日' B'在P中加载固定长度的记录文件, 在第一个中搜索F,L并将生日更改为B.然后保存 文件。"
这里的想法是我们创建一个程序,使用给定的变量将一个人的生日从一个未知变为另一个。作为我不耐烦的人,我打印()编辑P - 文件 - 并知道它是:
Adam Smith 11111985 Theodore Anderson
03201990Monty Biscuit-Barrel 10181980Adam
史密瑟斯10101960Ruthy Anderson 06062010
粘贴时间距会丢失,但名字和姓氏各有16个固定长度,生日长度固定为8个。
我尝试更改的生日的姓名是:
Adam Smithers
而我正试图将他的生日改为:
00000000
我尝试使用切片替换生日(因为根据我们的说明,在python中打开文本文件会将文件转换为字符串,因此会变成immutabel)。但是,当我尝试脚本时:
with open(P) as p:
new_file = p[0:141] + B + p[161:]
我收到错误消息" ' _io.TextIOWrapper'对象不是可订阅的"
我现在已经尝试了几个小时,但是还没有接近。任何建议都会在这一点上受到赞赏。谢谢
答案 0 :(得分:0)
从作业的描述中我了解到您需要更新现有文件。为此,您可以使用内存映射:mmap
。
这是您可以采取和扩展的部分代码:
import mmap
import os
def memory_map(filename):
size = os.path.getsize(filename)
fd = os.open(filename, os.O_RDWR)
return mmap.mmap(fd, size, access=mmap.ACCESS_WRITE)
def update_file(P, F, L, B):
with memory_map(P) as p:
# Find the offset of the right record with F and L
p[141:157] = B