繁体   English   中英

写入 CSV 文件的 Python 问题

[英]Python-Issue writing to CSV file

我可以将结果打印到终端但无法写入 csv 文件

完整文件: https : //1drv.ms/u/s!AizscpxS0QM4hJo5SnYOHAcjng-jww

 datapath = '1.json'

data = json.load(open(datapath))

with open('1.json') as file:
  data = json.load(file)

for element in data['RoleDetailList']:
 if 'RoleName' in element.keys():
   s = element['RoleName']
       #print s

 with open('roleassign.csv', 'wt') as file:
  file.write('Role,Policy\n')
  for policy in element['AttachedManagedPolicies']:
    c = s + ',' + policy['PolicyName']
    #print c
    file.write(c + '\n')

在 csv 文件中,我只得到标题,当取消注释print c我看到行打印到终端(输出)

输出中的一些行:

ADFS-amtest-ro,pol-amtest-ro
adfs-host-role,pol-amtest-ro
aws-elasticbeanstalk-ec2-role,AWSElasticBeanstalkWebTier

请尝试以下代码:

with open('output.json') as file:
    data = json.load(file)
with open('roleassign.csv', 'wt') as file:
    file.write('Role,Policy\n')
    for element in data['RoleDetailList']:
        if 'RoleName' in element.keys():
            s= element['RoleName']
        for policy in element['AttachedManagedPolicies']:
            c = s + ',' + policy['PolicyName']
            file.write(c + '\n')

您的文件编写器正在循环中打开,并且每次只用标题覆盖文件时。 干脆把它搬出来了。

您应该使用 csv 内置模块中的csv.writer

在你的例子中:

with open('roleassign.csv', 'w') as csv_file:
  writer = csv.writer(csv_file, delimiter=',')
  writer.writerow(['Role','Policy'])
  for policy in element['AttachedManagedPolicies']:
    c = [s, policy['PolicyName']]
    writer.writerow(c)

此外,为了结合 Rehan 的答案,更新您s变量的循环不应该在那里。 代码打击应该适合你:

with open('roleassign.csv', 'w') as csv_file:
  writer = csv.writer(csv_file, delimiter=',')
  writer.writerow(['Role','Policy'])
  for element in data['RoleDetailList']:
    if 'RoleName' in element.keys():
        s = element['RoleName']
    for policy in element['AttachedManagedPolicies']:
      c = [s, policy['PolicyName']]
      writer.writerow(c)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM