Заменить символ из возвращенной строки переменной - PullRequest
0 голосов
/ 06 марта 2020

Я пытаюсь заменить символ возвращаемой строки. Сначала я получаю строку с

import os
import re

#List .xlsx files followed by the string ESC
filenames = os.listdir('//xxx.xxx.xxx.com//a//b//c//archive')
for filename in filenames:
    getdate = re.search('(?<=ESC_)\w+', filename)
    print (getdate)

В ответ я получаю

<re.Match object; span=(27, 34), match='2020_01'>
None

Что правильно. Впоследствии я пробую это:

#Replace '_' with '-'
date = getdate.replace('_', '-')
print(date)

Но это дает мне ошибку

AttributeError: 'NoneType' object has no attribute 'replace'

Любой совет? Строка, возвращаемая из (getdate), не распознана?

Кроме того, как мне записать эту строку в файл .prm с некоторыми дополнительными значениями, например:

Body of .prm file has (date), aaaa, bbbb and cccc

1 Ответ

0 голосов
/ 06 марта 2020

Таким образом, вывод, который вы включили, показывает, что первое имя файла совпадает, а второе - нет. Если мы посмотрим на документацию для поиска , то увидим, что он вернет объект Match, если было совпадение, или None, если его не было.

Нет - это специальное значение в python (например, NULL) в других языках, которое представляет «ничто». У него просто нет replace метода! Это именно то, что говорит ошибка.

Итак, вам нужно сначала проверить, получил ли вы вообще результат в первую очередь:

if getdate:
  date = getdate.group(0).replace('_', '-')

Итак, проверьте, есть ли у вас «что-то» (как против "Нет"), чем делать свою операцию на чем-то. Вы также можете найти этот шаблон в документации .

Обратите внимание, что search не не возвращает строку. Возвращает Match Объект (или Нет). Ваше регулярное выражение может использовать группы для захвата нескольких вещей, но в этом случае у вас есть только одна, которая находится в группе 0. Это дает вам фактическую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...