0

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

所以基本上我需要:

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

前:

    # 例子.ldif
    域名:Aamir_005_000
    cn: 阿米尔_25
    姓名:阿米尔

    dn: Saul_024
    cn: 扫罗石
    姓名:扫罗

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

    # 例子.ldif
    域名:Aamir_005_000
    cn: 阿米尔_25
    姓名:阿米尔
    愚蠢的名字: syllabear

    dn: Saul_024
    cn: 扫罗石
    姓名:扫罗
    愚蠢的名字: syllabear

4

2 回答 2

0

python-ldap 及其 ldif 模块

Python 通过python-ldap 项目及其ldif模块支持 LDAP 记录。

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

您不想尝试使用正则表达式之类的技巧自己解析文件,只是在下周文件中的某些内容发生更改时让您的代码中断,然后是在那之后的一周,然后是几天之后。

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

于 2012-07-02T18:54:16.807 回答
-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])) 
于 2012-07-02T18:33:32.493 回答