如何使用python将ldif拆分成更小的文件



给定一个ldif文件,其中有999条记录要用ldapmodify更新,我如何将其拆分为更小的文件?


https://stackoverflow.blog/2011/07/01/its-ok-to-ask-and-answer-your-own-questions/

执行splitLdifByFiles('/tmp/bigfile.ldif', 10)将创建10个文件,并以循环方式在它们之间均匀分布所有记录。

def splitLdifByFiles(ldiffile, nfiles):
'''
Recebe um arquivo ldif <ldiffile> e separa em N arquivos <nfiles> menores (round robin)
'''
with open(ldiffile, 'r') as fr:
reader = fr.read()
chunks = ['n'+c+'n' for c in reader.split('nn') if c]
files = [open('/tmp/df.chunk.%d.ldif' % i, 'w') for i in range(nfiles)]
for idx, chk in enumerate(chunks):
files[idx % nfiles].writelines(chk)
for f in files:
f.close()

执行splitLdifByRecords('/tmp/bigfile.ldif', 100)将向输出文件写入100条记录并关闭它,重复此过程,直到它到达最后一块数据。

在本例中,最后一个文件将包含剩余的99条记录。

def splitLdifByRecords(ldiffile, maxrecords):
'''
Recebe um arquivo ldif <ldiffile> e separa em N registros <maxrecords> por arquivo
'''
with open(ldiffile, 'r') as fr:
reader = fr.read()
chunks = ['n'+c+'n' for c in reader.split('nn') if c]
chunkfile = None
for idx, chk in enumerate(chunks):
if idx % maxrecords == 0:
if chunkfile: chunkfile.close()
chunkfile = open('/tmp/df.chunk.%d.ldif' % (idx + maxrecords), 'w')
chunkfile.writelines(chk)
if chunkfile: chunkfile.close()

最新更新