如何更改文件中的一个字符而不再次写入整个文件?
如何更改文件中的一个字符?欢迎任何兼容 nix 的编程语言解决方案。
我编写了 .pgm 文件并将幻数放入“P2”。正确的是“P5”。现在我有 100000 多个文件需要修复。或者:如何使用 pylab.imread() 读取新文件?
仅供参考:pgm 是一种 ascii 图像文件格式 http://netpbm.sourceforge.net/doc/pgm。 html。 pylab 和 PIL 要求幻数为 P5
br, Juha
编辑:感谢您提供的所有解决方案。 dd-method 是唯一有效的方法。出于好奇,为什么 c 和 python 不呢?
How do I change one character in a file? Any nix-compliant programming language solution is welcome.
I wrote .pgm file and put the magic number to 'P2'. The correct one is 'P5'. Now I have 100000+ files to fix. Alternatively: how do I read my new file with pylab.imread()?
FYI: pgm is an ascii image file format http://netpbm.sourceforge.net/doc/pgm.html. pylab and PIL require magic number to be P5
br,
Juha
edit: Thank you for all solutions. dd-method is the only that works. For curiosity, why the c and python do not?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
谈论不涉及 Python 的解决方案,其中一种是这样的:
这将导致 dd 在文件开头写入“P5”,而不截断它
Talking about solutions not involving Python, one would be something like:
That will cause dd to write "P5" at the beginning of the file, without truncating it
在 C 语言中:
在任何语言中都是相同的过程(打开为二进制/写入/关闭)。
最重要的是:首先,备份所有内容。
编辑:我删除了 fseek,因为魔术字符串位于文件的开头,即
fopen(.. ., "r+b")
定位文件指针。In C:
It'll be the same procedure (open-as-binary/write/close) in just about any language.
Most importantly: First, backup everything.
EDIT: I removed the fseek because the magic string is at the beginning of the file, which is where
fopen(..., "r+b")
positions the file pointer.在 python 中,您可以使用 mmap 模块对文件进行内存映射。
In python you could memory map the file using the mmap module.
如果您知道它在哪里,您可以读取前 x 个字节,然后编辑这些字节,然后写回。
If you know where it is you can read the first x bytes then edit the bytes, then write back.
好吧,当然,修改文件后您必须保存文件,但我不明白为什么您认为必须重写每个字节。
Well, you will have to save the files after you modify them of course, but I don't see why you'd think you have to rewrite every single byte.