关于Python:一行一行地给织物写字典

Writing a dictionary to a textile line by line

本问题已经有最佳答案,请猛点这里访问。

我有一些代码可以创建字典并将其粘贴到文本文件中。但它将字典粘贴为一行。下面是它创建的代码和文本文件。

1
2
3
4
5
print('Writing to Optimal_System.txt in %s
'
%(os.getcwd()))    
f = open('Optimal_System.txt','w')
f.write(str(optimal_system))
f.close

有没有办法让文本文件给每个键值对这样的一行?

1
2
3
4
{'Optimal Temperature (K)': 425
 'Optimal Pressure (kPa)': 100
 ...
}

enter image description here


您可以使用pprint模块——它也适用于所有其他数据结构。为了强制每一条新的输入线,将width参数设置为较低的值。stream参数允许您直接写入文件。

1
2
3
4
5
6
import pprint
mydata = {'Optimal Temperature (K)': 425,
          'Optimal Pressure (kPa)': 100,
          'other stuff': [1, 2, ...]}
with open('output.txt', 'w') as f:
    pprint.pprint(mydata, stream=f, width=1)

将产生:

1
2
3
4
5
{'Optimal Pressure (kPa)': 100,
 'Optimal Temperature (K)': 425,
 'other stuff': [1,
                 2,
                 Ellipsis]}

使用格式化字符串并假设optimal_system是您的字典:

1
2
3
4
with open('output.txt', 'w') as f:
    for k in optimal_system.keys():
        f.write("{}: {}
"
.format(k, optimal_system[k]))

编辑

如@wwii所指出的,上述代码也可以写成:

1
2
3
4
with open('output.txt', 'w') as f:
    for k, v in optimal_system.items():
        f.write("{}: {}
"
.format(k, v))

而且字符串可以使用格式化的字符串文本进行格式化,这是从Python3.6开始提供的,因此f'{k}: {v}
'
而不是"{}: {}
".format(k, v)


可以使用json.dumps()对indent参数执行此操作。例如:

1
2
3
4
5
6
7
import json

dictionary_variable = {'employee_01': {'fname': 'John', 'lname': 'Doe'},
                       'employee_02': {'fname': 'Jane', 'lname': 'Doe'}}

with open('output.txt', 'w') as f:
    f.write(json.dumps(dictionary_variable, indent=4))