【问题标题】:Writing a nested dictionary to a .txt file [duplicate]将嵌套字典写入 .txt 文件 [重复]
【发布时间】:2018-06-28 23:05:21
【问题描述】:

我有一本像这样的字典

{'Berlin': {'Type1': 96},
 'Frankfurt': {'Type1': 48},
 'London': {'Type1': 288, 'Type2': 64, 'Type3': 426},
 'Paris': {'Type1': 48, 'Type2': 96}}

然后我想写入格式为 .txt 的文件

London
  Type1: 288
  Type2: 64
  Type3: 426

Paris
  Type1: 48
  Type2: 96

Frankfurt
  Type1: 48

Berlin
  Type1: 98

我尝试过使用

f = open("C:\\Users\\me\\Desktop\\capacity_report.txt", "w+")
f.write(json.dumps(mydict, indent=4, sort_keys=True))

但打印如下:

{
    "London": {
        "Type1": 288,
        "Type2": 64,
        "Type3": 426
     },
     "Paris": {
         "Type1": 48,
         "Type2": 96
     },
     "Frankfurt": {
         "Type1": 48
      },
      "Berlin": {
         "Type1": 98
      }
}

我想删除标点符号和括号。有没有办法做到这一点我看不到?

【问题讨论】:

  • Python 版本?我不明白你到底想要什么,过滤键为 '\n' 的条目?
  • @Tzomas:该部分现已删除。
  • 所需的输出看起来几乎像 YAML。
  • 我现在已经删除了 \n 键值问题,因为这是一个单独的问题(尽管您可以在内部循环中轻松测试不等于 0 的值)。

标签: python python-2.x


【解决方案1】:

您需要手动写出您的字典。您不是在这里尝试生成 JSON,使用该模块没有任何意义。

遍历字典键和值并将它们写成行。 print() 函数在这里很有帮助:

from __future__ import print_function

with open("C:\\Users\\me\\Desktop\\capacity_report.txt", "w") as f:
    for key, nested in sorted(mydict.items()):
        print(key, file=f)
        for subkey, value in sorted(nested.items()):
            print('   {}: {}'.format(subkey, value), file=f)
        print(file=f)

print() 函数为我们处理换行符。

【讨论】:

  • 感谢您的回复,这会引发此错误:print(key, file=f) ^ SyntaxError: invalid syntax。看不到任何明显的原因
  • @CEamonn:也许你正在使用旧的 Python 2?
  • @cdarke 抱歉,我使用的是 2.7
  • @CEamonn:这很容易解决,因为您可以使用 __future__ 导入为每个模块启用 Python 3 语法。
  • @CEamonn:您也可以不使用__future__ 导入来执行此操作:Python 2 语句也可以将输出定向到文件,但是通过导入,您的代码现在也与 Python 3 兼容。如果您是 Python 新手,我实际上强烈建议您学习 Python 3 而不要为 Python 2 烦恼。
【解决方案2】:

如果你使用 python 3.6 保留字典上插入键的顺序,你可以使用类似的东西。

with open('filename.txt','w') as f:
    for city, values in my_dict.items():
        f.write(city + '\n')
        f.write("\n".join(["  {}: {}".format(value_key, digit) for value_key, digit in values.items()]) + '\n')
        f.write('\n')

它的工作改变 f.write 以进行打印。我希望这会有所帮助。

【讨论】:

  • 你没有写足够的换行符;请记住,print() 添加一个换行符,而 file.write() 没有。
  • 是的,我忘了把两个新行。
  • 每个city 部分之间还缺少一个空行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2018-10-27
  • 2021-04-23
  • 2012-12-17
相关资源
最近更新 更多