在python中写入文件的特定部分

时间:2012-07-02 18:30:36

标签: python parsing

我正在编写一个带有.ldif和两个字符串的python命令行脚本。字符串对应于我需要在.ldif文件中的每个记录的末尾插入的键和值。但是,我有一个问题,想弄清楚如何解析.ldif文件,以便我知道我在记录的末尾。当我到达记录的末尾时,我需要在文件中写入两个字符串(Key:Value),它们之间带有冒号。

所以基本上我需要:

  1. 从命令行解析参数(.ldif,string1,string2)
  2. 创建我要追加到.ldif
  3. 的字符串
  4. 打开.ldif并查找每条记录的结尾。到达记录的末尾后,我需要编写我从string1和string2创建的字符串。
  5. 当我看到.ldif的EOF时,我需要返回带有更新记录的.ldif文件。
  6. 在:

    
        # example.ldif
        dn: Aamir_005_000
        cn: Aamir_25
        givenname: Aamir
    
        dn: Saul_024
        cn: Saululite
        givenname: Saul
    
    

    之后:python myscript.py ./example.ldif sillyname syllabear

    
        # example.ldif
        dn: Aamir_005_000
        cn: Aamir_25
        givenname: Aamir
        sillyname: syllabear
    
        dn: Saul_024
        cn: Saululite
        givenname: Saul
        sillyname: syllabear
    
    

2 个答案:

答案 0 :(得分:0)

python-ldap及其ldif模块

Python支持使用python-ldap project及其ldif模块的LDAP记录。

就像任何结构化文件格式一样,您希望使用强大的解析器和生成器来读取记录,操作它们并将它们写回来。

你不想尝试使用像正则表达式之类的黑客来解析文件,只是当文件中的某些内容在下周发生变化,然后在那之后的一周以及之后的几天内,你的代码就会中断。这一点。

您也不会尝试将XML节注入XML文件,您可以使用XML解析器,注入所需内容并将其写回。

答案 1 :(得分:-2)

import sys
with open(sys.argv[1],'r+') as f1:
    lines=[x.strip() for x in f1]
    f1.truncate(0)
    f1.seek(0)
    for x in lines:
       if x:
         f1.write(x+'\n')
       else:
         f1.write("{0}:{1}\n\n".format(sys.argv[2],sys.argv[3]))
    f1.write("{0}:{1}\n\n".format(sys.argv[2],sys.argv[3]))