如何更改文件中的一个字符而不再次写入整个文件?

发布于 2024-10-03 19:02:08 字数 408 浏览 4 评论 0原文

如何更改文件中的一个字符?欢迎任何兼容 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

情痴 2024-10-10 19:02:08

谈论不涉及 Python 的解决方案,其中一种是这样的:

echo -n "P5" | dd of=yourfile.pgm conv=notrunc

这将导致 dd 在文件开头写入“P5”,而不截断它

Talking about solutions not involving Python, one would be something like:

echo -n "P5" | dd of=yourfile.pgm conv=notrunc

That will cause dd to write "P5" at the beginning of the file, without truncating it

雨巷深深 2024-10-10 19:02:08

在 C 语言中:

FILE* f = fopen("file.txt", "r+b");
fputs("P5", f);
fclose(f);

在任何语言中都是相同的过程(打开为二进制/写入/关闭)。

最重要的是:首先,备份所有内容。

编辑:我删除了 fseek,因为魔术字符串位于文件的开头,即 fopen(.. ., "r+b") 定位文件指针。

In C:

FILE* f = fopen("file.txt", "r+b");
fputs("P5", f);
fclose(f);

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.

带刺的爱情 2024-10-10 19:02:08

在 python 中,您可以使用 mmap 模块对文件进行内存映射。

f = open("yourfile.pgm", "rb+")
map = mmap.mmap(f.fileno(), 0)
map[1] = "5"
map.close()

In python you could memory map the file using the mmap module.

f = open("yourfile.pgm", "rb+")
map = mmap.mmap(f.fileno(), 0)
map[1] = "5"
map.close()
那小子欠揍 2024-10-10 19:02:08

如果您知道它在哪里,您可以读取前 x 个字节,然后编辑这些字节,然后写回。

If you know where it is you can read the first x bytes then edit the bytes, then write back.

海的爱人是光 2024-10-10 19:02:08

好吧,当然,修改文件后您必须保存文件,但我不明白为什么您认为必须重写每个字节。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文