【问题标题】:Modify file using python使用python修改文件
【发布时间】:2013-05-18 02:18:01
【问题描述】:

我的文件包含以下几行:

info face="asd" size=49 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=0,0
common lineHeight=52 base=43 scaleW=128 scaleH=128 pages=1 packed=0
page id=0 file="asd.png"
chars count=9
char id=32 x=58 y=82 width=0 height=0 xoffset=0 yoffset=40 xadvance=9 page=0 chnl=0
char id=179 x=34 y=42 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=181 x=94 y=2 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=183 x=2 y=42 width=30 height=38 xoffset=2 yoffset=6 xadvance=27 page=0 chnl=0
char id=185 x=2 y=2 width=30 height=38 xoffset=2 yoffset=6 xadvance=27 page=0 chnl=0
char id=187 x=64 y=2 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=189 x=34 y=2 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
char id=191 x=34 y=82 width=22 height=36 xoffset=2 yoffset=8 xadvance=18 page=0 chnl=0
char id=193 x=2 y=82 width=28 height=38 xoffset=2 yoffset=6 xadvance=26 page=0 chnl=0
kernings count=0

我需要找到id 值,然后根据简单的条件修改(从值中添加/减去一些数字)该数字并写回文件。我的尝试是:

input = open('file.txt', 'r')
for line in input: 

我想在这里捕获char id= 行的 3 个部分、值和行的其余部分。然后修改值并创建新字符串。但我怀疑它在 Python 中是否有效。另外我不确定是否有办法处理同一个文件,而不是创建新文件、删除旧文件并重命名为旧名称以修改文件内容。

【问题讨论】:

  • " 我不确定是否有办法处理同一个文件,而不是创建新文件、删除旧文件并重命名为旧文件" 是的,有,但条件是必须替换的字符串的每个部分都必须比替换的部分更长或长度相同。这里以这种方式处理的一个例子:(stackoverflow.com/a/16591889/551449) 关键是在'rb+'模式下打开文件。但是我给出的示例相当复杂,因为在这个文件中,要替换的模式可能会连续重复。在你的情况下,我认为情况并非如此。

标签: python python-2.7


【解决方案1】:

您将 替换文件(因此写入临时文件)。但是,fileinput module 让您轻松完成:

import fileinput
import sys

for line in fileinput.input(filename, inplace=True):
    if line.startswith('char id='):
        _, id_, rest = line.split(None, 2)
        id_ = int(id_.split('=')[1])
        id_ += 1  # adjust as needed
        line = 'char id={} {}'.format(id_, rest)

    sys.stdout.write(line)

此示例只是将id 的值加 1,您可以调整代码以使用 id_ 整数做任何您想做的事情。

通过指定inplace=Truefileinput 模块会将原始文件移动到备份,捕获您写入stdout 的任何内容,并将其写入原始文件位置。

【讨论】:

  • id_ 的语法无效。这是一些保留关键字吗?
  • @Pablo:不,我在编辑答案时忘记删除上一行的一些文本 (int()。固定。
  • 就像一个魅力,只需要 .close 流,否则文件是空的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 2014-05-15
相关资源
最近更新 更多