Чтение одинаковых совпадений с использованием regex и сохранение в csv в несколько строк
У меня есть txt файл :
Your Name: Arya Arjun
Subject Name :
Math
Your Name: Arya Arvind
Subject Name :
Science
Я использую regex для получения имени: ^Ваше имя:[\S](.)
Код :
filename = "Path/File.txt"
fo = open(filename, 'r')
lines = fo.readlines()
name = ""
for line in lines:
match = re.findall("^Your Name:[\S]*(.*)", line)
if len(match) > 0:
name += ",".join(match)
print("-----------Your Name------------")
print("name :",name)
O/P > имя: Арья Арджун Арья Арвинд
поэтому он сохраняет имя в csv, как показано ниже.
Теперь я сохраняю результат (имена) в csv файл, но он сохраняется следующим образом :
Мне нужно сохранить его следующим образом:
Пожалуйста, дайте мне знать, если будут какие-либо обновления.
for line in lines: match = re.findall("^Your Name:[\S]*(.*)", line) if len(match) > 0: name += ",".join(match)
Это просто странно. Откуда вы это скопировали и вставили?
Ваш пример предполагает, что
совпадение нуля или более непробельных символов
всегда будет сводиться
к "мы сопоставляем ноль таких символов".
Поэтому удалите это.
И замените его на \s+
, чтобы пропустить
(приблизительно один?) символов ПРОБЕЛА
после двоеточия :
.
Обратите внимание, что символы запятой отсутствуют ,
не появляются в выводе. Поэтому .findall()
не имеет смысла и отвлекает тех, кто сопровождает
этого кода. Говорите то, что имеете в виду, и подразумевайте
то, что вы говорите. Замените его на
простым .search()
.
Идентификатор name
выбран неудачно,
поскольку он, очевидно, должен
накапливать все имена, найденные в файле.
Проверка len(match)
, кажется, приглашает
диагностика "'NoneType' has no len()".
Складывая все это вместе, мы получаем:
names = []
for line in lines:
match = re.search(r'^Your Name:\s+(.*)', line)
if match:
names.append(match.group(1))
print(','.join(names))
или, если хотите, используйте '\n'.join(names)
, чтобы поместить их на отдельные строки.
Регулярное выражение - потрясающий инструмент. Но эта проблема достаточно проста что вы можете предпочесть простой манипуляции со строками.
your_name = 'Your Name: '
if line.startswith(your_name):
name = line.removeprefix(your_name)
names.append(name)