我正在制作一个脚本,用于检查/创建/更新项目中源文件顶部的版权声明。将(生成的)标题添加到多个文件的最有效方法?
这通常是I/O限制,因为每次使用脚本时,标题(缺失或其他)都会变得更大(例如,为现有通知添加更多年),因此文件的其余部分必须是重新定位到稍后的偏移量。这意味着读取整个文件,然后写回(+我想要的小标题更改)。
它发生在我身上,有可能是一个更有效的方法来做到这一点。这个用例并不罕见吗?
我天真地以为有可能寻求到一个负的,你可以寻求过去的文件(这通常会导致稀疏文件)结束以同样的方式抵消。
import os
fh = file("code.py", "rb+")
original_size = os.fstat(fh.fileno()).st_size
data = fh.read()
# `prefix` should be prepended to the file
# `updated_data` is anchored to offset 0, and likely only a
# few 10s of bytes long (unlike the original file)
# `suffix should` be postpended to the file
prefix, updated_data, suffix = get_changes(data)
fh.seek(0)
fh.write(updated_data)
# WISHFUL THINKING. Not possible to seek to a negative offset.
fh.seek(-1 * len(prefix))
fh.write(prefix)
fh.seek(max(original_size, len(updated_data)))
fh.write(suffix)
fh.close()
环境的东西:
- 的Python V2.6
- 的GNU/Linux(Red Hat企业5 + Ubuntu的10.04,如果它事项)
寻求替代回回,你为什么不能写前缀第一,其次是updated_data其次后缀? – Abhijit
没理由,我只想说明我的数据是如何构建的。在生产代码中,我会避免不必要的寻求,因为你建议。 – RobM