Python 配置分析器。空格导致 AttributeError

Python Configparser. Whitespace causes AttributeError

我收到了一些带有 .ini 文件的文件。我必须从 [FILES] 部分接收文件名。
有时在 .ini 文件的另一部分中有一个额外的空格,这会在 ConfigParser 模块中引发异常
“错误”ini 文件的示例:

[LETTER]
SUBJECT=some text
some text
 and text with whitespace in the beggining 

[FILES]
0=file1.txt
1=file2.doc

我的代码(Python 3.7):

import configparser

def get_files_from_ini_file(info_file):
    ini = configparser.ConfigParser(allow_no_value=True)
    ini.read(info_file) # ERROR is here
    if ini.has_section("FILES"):
        pocket_files = [ini.get("FILES", i) for i in ini.options("FILES")]
        return pocket_files

print(get_files_from_ini_file("D:\bad.ini"))


Traceback (most recent call last):
  File "D:/test.py", line 10, in <module>
    print(get_files_from_ini_file("D:\bad.ini"))
  File "D:/test.py", line 5, in get_files_from_ini_file
    ini.read(info_file) # ERROR
  File "C:\Users\ap\AppData\Local\Programs\Python\Python37-32\lib\configparser.py", line 696, in read
    self._read(fp, filename)
  File "C:\Users\ap\AppData\Local\Programs\Python\Python37-32\lib\configparser.py", line 1054, in _read
    cursect[optname].append(value)
AttributeError: 'NoneType' object has no attribute 'append'

我无法影响我收到的文件,所以有什么办法可以忽略这个错误吗?事实上我只需要 [FILES] 部分来解析。
已尝试 empty_lines_in_values=False 没有结果
可能那是无效的 ini 文件,我应该编写自己的解析器吗?

如果您只需要“FILES”部分,一个简单的方法是:

  • 打开文件并读入字符串
  • 使用 .split() 方法获取“[FILES]”之后的部分
  • 在字符串前添加“[FILES]”
  • 在字符串上使用 configparser read_string 方法

这是一个 hacky 解决方案,但它应该有效:

  import configparser

  def get_files_from_ini_file(info_file):
      with open(info_file, 'r') as file:
          ini_string = file.read()
      useful_part = "[FILES]" + ini_string.split("[FILES]")[-1]

      ini = configparser.ConfigParser(allow_no_value=True)
      ini.read_string(useful_part) # ERROR is here
      if ini.has_section("FILES"):
          pocket_files = [ini.get("FILES", i) for i in ini.options("FILES")]
          return pocket_files

  print(get_files_from_ini_file("D:\bad.ini"))