Игнорирование комментариев (символов после определенного символа) при чтении строк - PullRequest
0 голосов
/ 24 апреля 2020

Кто-нибудь из вас знает хорошую схему избавления от комментариев при чтении в файле построчно в Py3? Я вообще не хочу использовать регулярные выражения.

Предположим, содержимое файла выглядит примерно так:

#first comment
while prime_count < n:#second comment
        for number in range(2, current):
            if current % number==0:#third comment
                break

Обычно я читаю содержимое с помощью:

file = open(refname, "r")
lines = file.readlines()
print(lines)

Вывод должен быть:

    while prime_count < n:
            for number in range(2, current):
                if current % number==0:
                    break

Любой намек на определенное направление будет полезен. Примерно 500 файлов будут иметь порядок 5000 символов.

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Не просто open файл - его тоже нужно закрыть. Лучше всего использовать менеджер контекста with:

with open(refname, "r") as file:
    # only keep those lines that do not start with a pound sign (after removing any whitespace)
    lines = [l for l in file.readlines() if not l.lstrip().startswith("#")]
print(lines)
0 голосов
/ 24 апреля 2020

Благодаря Брэму-ванрою, который направил меня на раздевание / разделение - раньше я об этом не думал.

with open(refname, "r") as file:
    for line in file:
        line = line.split('#', 1)[0]
        print(line)

будет делать то, что я хочу. Разделение строки на знак фунта и сохранение только первой части.

Другая версия, которая избавляет от нескольких пустых строк, но использует регулярное выражение:

with open(refname) as file:
    for line in file:
        line = line.split('#', 1)[0]+"\n"
        line = re.sub(r'\n+', '\n',line)
        if line.strip():
            list.append(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...