Python 3中configparser模块中的read和read_file有什么区别?

7

我想知道在configparser中,read和read_file的使用区别。就我测试过的而言

config_parser = configparser.ConfigParser()
config_parser.read(config_file)

并且。
config_parser = configparser.ConfigParser()
config_parser.read_file(config_file)

两个都适用于我。 config_file是我作为输入参数传递的配置文件的名称。


"read: 尝试读取和解析文件名列表,返回成功解析的文件名列表。", "read_file: 从 f 中读取和解析配置数据,f 必须是一个生成 Unicode 字符串的可迭代对象(例如以文本模式打开的文件)。" - tgikal
1个回答

7

read_file 接受类文件对象,read 接受文件名。

read 的主要问题在于,如果文件不存在,它会默默失败,导致 ConfigParser 为空。

config_parser.read("config.ini")  # object is unchanged even if file doesn't exist

read_file 这个函数不会发生这种情况,因为你可以控制文件的打开方式。

with open("config.ini") as f:
   config_parser = configparser.RawConfigParser()
   config_parser.read_file(f)

另一个有用的情况是当您有一系列代表.ini文件内容的行列表时。read_file接受字符串作为输入(因为字符串是可迭代的),但结果并不实用。
>>> config_parser.read_file("config.ini")
Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
  File "L:\Python34\lib\configparser.py", line 690, in read_file
    self._read(f, source)
  File "L:\Python34\lib\configparser.py", line 1057, in _read
    raise MissingSectionHeaderError(fpname, lineno, line)
configparser.MissingSectionHeaderError: File contains no section headers.
file: '<???>', line: 1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接