如何在不重写整个文件的情况下更改文件中的一个字符?

时间:2010-11-24 10:11:16

标签: linux file-io file filesystems

如何更改文件中的一个字符?任何符合nix标准的编程语言解决方案都是受欢迎的。

我写了.pgm文件并将幻数放到'P2'。正确的是'P5'。现在我有100000多个文件需要修复。或者:如何使用pylab.imread()读取我的新文件?

仅供参考:pgm是一种ascii图像文件格式http://netpbm.sourceforge.net/doc/pgm.html。 pylab和PIL需要幻数为P5

BR, 尤哈

编辑:感谢您提供所有解决方案。 dd-method是唯一有效的方法。为了好奇,为什么c和python没有?

5 个答案:

答案 0 :(得分:4)

谈论不涉及Python的解决方案,可以是:

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

这会导致dd在文件的开头写“P5”而不截断它

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

在C:

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

几乎任何语言都是相同的程序(open-as-binary / write / close)。

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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