在文本文件中写一个整数或布尔值

时间:2018-08-23 20:55:36

标签: python python-3.x

我在一个类中包含此功能:

def new_config(self):
    dict_dat = {"Display Set": self.main.id[20], "Display Width": self.main.id[4], "Display Height": self.main.id[5],
                "Fullscreen": self.main.id[9], "Music Volume": self.main.id[11], "Sound Volume": self.main.id[13],
                "Voice Volume": self.main.id[15], "Ambient Volume": self.main.id[17], "Other Volume": self.main.id[19]}
    cgo = open(self.path, "w")
    for name, dat in dict_dat.items():
        cgo.write(name + ":" + dat)
    cgo.close()

在各种“ self.main.id”中包含整数和布尔值。我想知道如何在文本文件中一行一行地编写值名称(例如“ Display Set”)和值(self.main.id [20]),而不必将所有内容都转换为字符串

如上所述,我收到错误消息:TypeError: Can't convert 'int' object to str implicitly但是,事实是,如果可能的话,我想写数据而不必转换。

对于另一个文件,我使用了Pickle模块,但是通过手动打开文件来读取文件,任何人都不可读,因此在这种情况下它变得无用。

5 个答案:

答案 0 :(得分:2)

一个明智的解决方案是使用f-strings(在Python 3.6+中可用),如下所示:

def new_config(self):
    dict_dat = {"Display Set": self.main.id[20], "Display Width": self.main.id[4], "Display Height": self.main.id[5], "Fullscreen": self.main.id[9], "Music Volume": self.main.id[11], "Sound Volume": self.main.id[13], "Voice Volume": self.main.id[15], "Ambient Volume": self.main.id[17], "Other Volume": self.main.id[19]}
    with open(self.path, 'a+') as f:
        for name, dat in dict_dat.items():
            f.write(f'{name}:{dat}\n')

如果dat是布尔值True或False,则会写为“ True”或“ False”。
如果dat是整数,则会写入整数值。

注1:我也强烈建议您使用with ... as ...语句,该语句会自动并正确地在块末尾关闭文件。
注2:不幸的是,我终于了解到您正在使用Python 3.4。因此,该解决方案与您无关(您在f字符串上出现语法错误)。您可以升级到3.6+,也可以将f字符串替换为'{0}:{1}\n'.format(name, dat)

答案 1 :(得分:2)

正如我之前所说,您可以print到一个文件。

def new_config(self):
    dict_dat = {
        'Display Set': 20, 
        'Display Width': 4, 
        'Display Height': 5,
        'Fullscreen': 9,
        'Music Volume': 11,
        'Sound Volume': 13,
        'Voice Volume': 15, 
        'Ambient Volume': 17, 
        'Other Volume': 19,
    }
    with open(self.path, 'w') as cgo:
        for name, idx in dict_dat.items():
            print(name, self.main.id[idx], sep=':', file=cgo)

答案 2 :(得分:1)

利用string.format方法:

file.write('{0}:{1}\n'.format(name, dat))

enter image description here

答案 3 :(得分:1)

考虑使用JSON:

import json

# write your dict
with open(self.path, "w") as file:
    json.dump(dict_dat, file)

# read it back
with open(self.path) as file:
    loaded_dict = json.load(file)

答案 4 :(得分:1)

每个Open()内置函数的 write()方法。 请检查文档。 - f.write(string)将字符串的内容写入文件,返回写入的字符数。要编写字符串以外的内容,需要先将其转换为字符串。

https://docs.python.org/3.3/tutorial/inputoutput.html

您可以通过这种方式更改代码。

file.write(str(name) + ":" + str(dat) + "\n")