Python - 编写循环作为文件作为生成器而不是 str/dict



我是一个初学者开发人员,我正在尝试将以下变量在 for 循环中写入文件,但它试图在生成器时作为 str 写入。 尝试使用第二种方法时,我也会收到不受支持的操作数类型。

divdir = conn.extend.standard.paged_search('cn = All.DL Div DSS Directors, ou = Distribution Lists, ou = Exchange, dc=google,dc=corpad,dc=net', '(objectClass=*)', attributes=['member'])
for b in divdir:
with open ('test2.txt', 'w') as file:
file.write (b)

我还尝试了以下方法:

divdir = conn.extend.standard.paged_search('cn = All.DL Div DSS Directors, ou = Distribution Lists, ou = Exchange, dc=google,dc=corpad,dc=net', '(objectClass=*)', attributes=['member'])
my_file=open("test2.txt","w")
for b in divdir:
my_file.write(b.get('divdir')+'n')
my_file.close()

它给出的错误是:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

把我的评论放在一起,你应该对以下调整后的陈述感到满意。

这将对文件执行单次写入,该文件会预先准备所有输出(包括设置generator=False(,并通过连接所有值一次写入所有输出:

divdir = conn.extend.standard.paged_search('cn = All.DL Div DSS Directors, ou = Distribution Lists, ou = Exchange, dc=google,dc=corpad,dc=net', '(objectClass=*)', attributes=['member'], generator=False)
directors = map(str, divdir)         #Stringify each director from generator
directors_str = 'n'.join(directors) #Join the list of directors with a newline
with open('test2.txt', 'w') as file:
file.write(directors_str)        #Write to file

尝试使用str()将字典转换为字符串。应该看起来像这样:

for b in divdir:
with open ('test2.txt', 'w') as file:
file.write (str(b))

对于该TypeError,当您调用b.get('divdir')时,结果为None。 您可能需要仔细检查是否使用了正确的键名,或者如果字典不包含该键,则可以提供要使用的默认值。

x = b.get('divdir', 'some default value')

如果b中不存在键divdir,则x的值将为"某个默认值"。

您可以使用json库将dict对象写入文件。 试试这个:

import json
# divdir = conn.extend.standard.paged_search('cn = All.DL Div DSS Directors, ou = Distribution Lists, ou = Exchange, dc=google,dc=corpad,dc=net', '(objectClass=*)', attributes=['member'])
divdir={'raw_dn': b'CN=All.DL Div Controllers - National Group,OU=Distribution Lists,OU=Exchange,DC=google,DC=corpad,DC=net', 'dn': 'CN=All.DL Div Controllers - National Group,OU=Distribution Lists,OU=Exchange,DC=google,DC=corpad,DC=net', 'raw_attributes': {'member': [b'CN=gji9847,OU=U02562,OU=02562,DC=google,DC=corpad,DC=net', b'CN=exx8092,OU=U06032,OU=06032,DC=google,DC=corpad,DC=net', b'CN=EWR8386,OU=U09373,OU=09373,DC=google,DC=corpad,DC=net', b'CN=HXU9279,OU=U00704,OU=00704,DC=google,DC=corpad,DC=net', b'CN=KVG6693,OU=U25692,OU=25692,DC=google,DC=corpad,DC=net', b'CN=JCL6495,OU=U01246,OU=01246,DC=google,DC=corpad,DC=net', b'CN=RNE9520,OU=U01673,OU=01673,DC=google,DC=corpad,DC=net', b'CN=PCN5400,OU=U01673,OU=01673,DC=google,DC=corpad,DC=net', b'CN=WPM9271,OU=U01673,OU=01673,DC=google,DC=corpad,DC=net', b'CN=JKJ2421,OU=U01692,OU=01692,DC=google,DC=corpad,DC=net']}, 'attributes': {'member': ['CN=gji9847,OU=U02562,OU=02562,DC=google,DC=corpad,DC=net', 'CN=exx8092,OU=U06032,OU=06032,DC=google,DC=corpad,DC=net', 'CN=EWR8386,OU=U09373,OU=09373,DC=google,DC=corpad,DC=net', 'CN=HXU9279,OU=U00704,OU=00704,DC=google,DC=corpad,DC=net', 'CN=KVG6693,OU=U25692,OU=25692,DC=google,DC=corpad,DC=net', 'CN=JCL6495,OU=U01246,OU=01246,DC=google,DC=corpad,DC=net', 'CN=RNE9520,OU=U01673,OU=01673,DC=google,DC=corpad,DC=net', 'CN=PCN5400,OU=U01673,OU=01673,DC=google,DC=corpad,DC=net', 'CN=WPM9271,OU=U01673,OU=01673,DC=google,DC=corpad,DC=net', 'CN=JKJ2421,OU=U01692,OU=01692,DC=google,DC=corpad,DC=net']}, 'type': 'searchResEntry'}
with open('test2.txt', 'w') as file:   
file.write(json.dumps(divdir))

最新更新