Zimbra zmprov 格式化文件到 csv 和 ldif

RASG

我正在学习 python,我的第一个任务是将 Zimbrazmprov格式的文件转换csvldif.

由于我不知道 Python 内置函数来完成任务,所以我走了很长一段路,遍历行和打印。

如果你们能告诉我如何正确地做到这一点,我将不胜感激。

这是输入 zmp_file,要转换为 csv 和 ldif

ca [email protected]      ''
ma [email protected] cn   'User One'
ma [email protected] cpf  ''
ma [email protected] l    'Porto Alegre'

ca [email protected]      ''
ma [email protected] cn   'User Two'
ma [email protected] cpf  '0123456789'
ma [email protected] l    ''

所需的 .csv 输出(字段顺序不重要)

mail,cn,cpf,l
[email protected],"User One",,"Porto Alegre"
[email protected],"User Two",0123456789,

以及所需的 .ldif 输出(字段的顺序并不重要)

dn:   '[email protected]'
cn:   'User One'
l:    'Porto Alegre'
mail: '[email protected]'

dn:   '[email protected]'
cn:   'User Two'
cpf:  '0123456789'
mail: '[email protected]'

我能走多远:

with zmp_file as input_file
    for line in input_file:
        if line.startswith('ca'):
            mail = line.split()[1]
            print "dn: uid={0}".format(mail)
            print "mail: {0}".format(mail)
        elif line.startswith('ma'):
            words = shlex.split(line)[-2:]
            print "{0}: {1}".format(words[0], words[1])
        else:
            print
RASG

好的。知道了。

我知道这不是 codereview.stackexchange.com 但如果有人有意见,我在这里学习。

#!/usr/bin/env python

import csv
import os
import shlex
import sys
from ldif import LDIFParser, LDIFWriter

def zmp_to_csv_and_ldif(zmp_file):

    all_attrs = set()
    data      = {}
    records   = {}

    with zmp_file as input_file:
        for line in input_file:
            if line.startswith('ca'):
                cmd, mail, pwd       = line.split()
                data['mail']         = mail
                data['userpassword'] = pwd
                records[mail]        = data
                all_attrs.update(['mail','userpassword'])
            elif line.startswith('ma'):
                cmd, mail, attr, value = shlex.split(line)
                data[attr]             = value
                records[mail]          = data
                all_attrs.add(attr)
            else:
                data = {}

    with open('/tmp/rag-parsed.csv', 'w') as output_file:
        csv_writer = csv.DictWriter(output_file, fieldnames=all_attrs, extrasaction='ignore', lineterminator='\n')
        csv_writer.writeheader()
        for mail, data in sorted(records.items()):
            csv_writer.writerow(data)

    with open('/tmp/rag-parsed.ldif', 'w') as output_file:
        b64_attrs   = map(str.lower, ['jpegPhoto', 'userPassword'])
        ldif_writer = LDIFWriter(output_file, base64_attrs=b64_attrs, cols=999)
        for mail, data in sorted(records.items()):
            dn = "uid={0}".format(mail)
            data_in_ldap_fmt = dict([k, v.split('\n')] for k, v in data.items() if v)
            ldif_writer.unparse(dn, data_in_ldap_fmt)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在LDIF文件中添加objectclass和custom属性?

来自分类Dev

从Java以编程方式将修补的数据导出和导入LDIF

来自分类Dev

VS2013剃刀和格式化文件

来自分类Dev

在Python中格式化CSV文件的输出

来自分类Dev

从CSV读取数据时出现问题-排序和格式化问题

来自分类Dev

重新格式化和清理带有跨大括号匹配的花括号的CSV文件

来自分类Dev

如何从JavaScript中的不规则CSV解析和格式化字符串?

来自分类Dev

将通常格式化的CSV文件的导入数据过程自动化到SQL Server 2012

来自分类Dev

如何在LDIF文件中添加objectclass和custom属性?

来自分类Dev

使用fscanf和sscanf从文件读取格式化的输入

来自分类Dev

基本ldif来设置用户和组

来自分类Dev

如何格式化CSV文件中的SQL比较

来自分类Dev

在R中重新格式化CSV文件

来自分类Dev

使用Java将CSV文件转换为LDIF文件

来自分类Dev

使用标头索引和csv格式化值

来自分类Dev

使用python重新格式化csv文件?

来自分类Dev

Oracle使用可选字段和重复值格式化CSV地址

来自分类Dev

使用 LDIF 和 Python 删除 LDAP 中的属性

来自分类Dev

openldap - 无法从架构文件创建 ldif 文件

来自分类Dev

格式化历史股票数据的CSV文件

来自分类Dev

分组和格式化数组以写入 CSV

来自分类Dev

Zimbra 电子邮件从 Postfix 队列到 eml 格式

来自分类Dev

使用 csv writer 和 pandas 格式化此 txt 文档的正确方法是什么?

来自分类Dev

如何cat和打印格式化的多个文件?

来自分类Dev

格式化 .csv 文件以打印表格 (C)

来自分类Dev

从对象格式化 CSV

来自分类Dev

在python中加载和格式化文件

来自分类Dev

使用 powershell 格式化 CSV 文件输出

来自分类Dev

用python格式化csv文件

Related 相关文章

热门标签

归档