Файл не содержит заголовков разделов - Python - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь прочитать файл конфигурации в Python 3.7, используя SafeConfigParser. Я попытался дать полное имя файла (с расположением файла), давая только имя файла (без расположения файла), используя функцию readfp в SafeConfigParser, используя только configparser вместо safeconfigparser, но ни один из них не сработал. Я на 100% уверен, что по крайней мере правильный файл читается.

Вот мой код Python:

from configparser import SafeConfigParser
import os

def main():
    filename = "C:/Users/Umer Sherdil Paracha/Desktop/distutils.cfg"
    if os.path.isfile(filename):
        parser = SafeConfigParser()
        parser.read(filename)
        print(parser.sections())
        screen_width = parser.getint('graphics','width')
        screen_height = parser.getint('graphics','height')
    else:
        print("Config file not found")

if __name__=="__main__":
    main()

и вот мой файл cfg:

[GRAPHICS]
height = 600
width = 800

Я полностью застрял в этой глупой проблеме. Любая помощь в этом отношении будет принята с благодарностью. Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

В Windows INI-файлах используйте

r'pathname'  

для идентификации файлов.

r"pathname"

также может работать. В моем случае, без "r" Python не выдает ошибку на ConfigParser.read, он просто не может найти раздел.

0 голосов
/ 12 января 2019

Трудно сказать наверняка, но я предполагаю, что что-то не так с вашей строкой имени файла.

Попробуйте сначала этот код отладки:

filename = "C:/Users/Umer Sherdil Paracha/Desktop/distutils.cfg"
with open(filename) as file:
    print("Successfully got to this line!")

Полагаю, это приведет к ошибке файла не найден. Вероятно, для этого есть несколько причин (хотя вы всегда можете проверить правильность пути, щелкнув правой кнопкой мыши файл и открыв свойства):

  1. Вы используете косые черты в стиле Unix. Windows обычно использует обратную косую черту ()
  2. Когда вы начинаете использовать обратную косую черту в строках, Python может запутаться, так как обратная косая черта также используется для экранирования специальных символов. Сообщите python, что это необработанная строка , добавив r перед начальной кавычкой: r"\I will not \escape the backslashes"

Я считаю, что ваша переменная имени файла должна выглядеть так:

filename = r"C:\Users\Umer Sherdil Paracha\Desktop\distutils.cfg"

Если вы внесете оба этих изменения в строку вашего файла, я подозреваю, что приведенный выше тестовый код сработает, как и ваш реальный код после внесения этих изменений.

Как только вы успешно сможете открыть свой файл, помните, что python всегда чувствителен к регистру, поэтому вам придется обновить следующие две строки кода, как показано ниже, чтобы отразить регистр, используемый в вашем файле .cfg:

screen_width = parser.getint('GRAPHICS','width')
screen_height = parser.getint('GRAPHICS','height')
...