Как сократить полное ФИО в 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)
Сидоров Н. П., Петрова М. Н.