【问题标题】:Python / configparser file data readingPython/configparser 文件数据读取
【发布时间】:2021-05-03 10:46:48
【问题描述】:

我在从文件中读取数据时遇到了一些问题。我想从 .ini 数据文件中获取属性,使其被函数变为红色,但 configparser 没有正确读取它。如果有人能解释这是错误的,我将不胜感激。提前谢谢!

函数 sn-p

config = configparser.ConfigParser()
config.read('config.ini')

def browseFiles():
    filename = filedialog.askopenfilename(initialdir = config['select']['dir'],
                                          title = config['select']['ttl'],
                                          filetypes = config['select']['ft'])
      
    # Change label contents
    label_file_explorer.configure(text="File Opened: "+filename)

我的 .ini 文件数据

[select]
#directory
dir = "home/"
#title
ttl = "Select a File"
#filetype
ft = (("Text files","*.txt*"),("all files","*.*"))
  

【问题讨论】:

    标签: python configparser


    【解决方案1】:

    正如 Nirmal Dey 指出的,ConfigParser 只会返回字符串值。您必须使用例如将它们转换为 Python 类型。 ast.literal_eval

    FWIW,我编写了一个名为configdot 的小包,用于解析INI 文件。它将自动返回 Python 类型,并允许对配置变量进行属性样式访问(例如 config.select.ft 在您的情况下)

    【讨论】:

    • 我喜欢@jussi,非常方便
    • 顺便说一句,我需要把st.literal_eval放在哪里?在这里 filedialog.askopenfilename ?
    • 你必须把它放在字符串值的参数周围。例如。 filetypes = ast.literal_eval(config['select']['ft'])
    • 但是如果我用你的包我就不需要了,对吧?
    【解决方案2】:

    Config parsers do not guess datatypes of values in configuration files, always storing them internally as strings.

    .ini 文件中存在的每个键值对都将被解析为字符串。

    您的 filedialog.askopenfilename 函数在您为其提供字符串数据类型时,需要在 filetypes 参数中包含一个元组。

    【讨论】:

    • @Dey 对不起,最后一部分我没理解正确
    • filetypes 参数需要一个迭代器。它不能与元组的字符串化版本一起使用。如果您希望从 .ini 文件中传递文件类型参数,那么您需要在 .ini 文件中稍作更改。 ``` ft[]=("Text Files", "*.txt") ft[]=(""all files", ".") ``` 在它之后,配置解析器会知道 ft 是一个列表而不是一个字符串。
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多