Как сократить полное ФИО в python

Я сделал фикцию которая сокращает полное ФИО.

ФИО - Иванов Иван Петрович
Результат - Иванов И.П.

Функция:

n = ФИО
parts = n.split(' ')
name = (parts[0] + ' ' + parts[1][0] + '.' + parts[2][0] + '.')

К примеру в одной строке (ячейки) находится 2 (два) полных ФИО.

Как построить функцию чтобы она сокращала (работала) с одним и с двумя ФИО?

ФИО:

Жуковский Иван Петрович
Сидоров Николай Петрович, Петрова Марина Николаевна

Ожидаемый результат:

Жуковский И.П.
Сидоров Н.П., Петрова М.Н.

Ответы (3 шт):

Автор решения: Danny

Так для одного имени:

user_name = 'Иванов Иван Иванович'
user_name_list = user_name.split(' ')
print(f'{user_name_list[0]} {user_name_list[1][0:1]}.{user_name_list[2][0:1]}.')

А так для списка имен:

users = ['Жуковский Иван Петрович', 'Сидоров Николай Петрович', 'Петрова Марина Николаевна']
change_users = []
for name in users:
    cache = name.split(' ')
    change_users.append(f'{cache[0]} {cache[1][0:1]}.{cache[2][0:1]}.')

print(*change_users)
→ Ссылка
Автор решения: CrazyElf

Работайте над проблемами постепенно, декомпозируя задачу на части и решая эти части по отдельности:

  • напишите функцию, которая делает ФИО из одного Имени Отчества Фамилии
  • напишите функцию, которая разделяет строку на отдельные Имя Отчество Фамилию, а дальше можно использовать первую функцию
def fio(name):
    parts = name.split()
    return f'{parts[0]} {parts[1][0]}.{parts[2][0]}.'

def text_fio(text):
    return ', '.join(map(fio, map(str.strip, text.split(','))))

print(fio('Жуковский Иван Петрович'))
print(text_fio('Сидоров Николай Петрович, Петрова Марина Николаевна'))

Вывод:

Жуковский И.П.
Сидоров Н.П., Петрова М.Н.
→ Ссылка
Автор решения: GrAnd

Можно одним махом через замену, используя регулярное выражение.

import re
data = 'Сидоров Николай Петрович, Петрова Марина Николаевна'

new_data = re.sub(r'\b(\w+)\b\s+\b(\w)\w*\b\s+\b(\w)\w*\b', r'\1 \2. \3.', data)
print(new_data)
Сидоров Н. П., Петрова М. Н.
→ Ссылка