Комментарии 17
НЛО прилетело и опубликовало эту надпись здесь
или так:
pathlib.Path(filename).suffix
numitus2 Спасибо за пример, пример такого рода хорошо дополняет статью
numitus2 почему же жесть? Код работает на своих тестовых данных, для иллюстрации годится.
Выше была ссылка, кому надо будет учиться дальше.
По итогу у меня впечатление, что автору удалось объяснить проблему XY на примере, а научить работе с пакетом os или тем более pathlib он не собирался ;) Это лишь моя догадка.
numitus2 еще раз спасибо, мне было бы лень внимательно читать статью без вашего замечания, а так я тоже начал приглядываться, возможно найдем еще неточности, поможем автору с качеством и при удачном стечении обстоятельств переводная статья станет точнее оригинала.
А если у файла нет расширения?
Так наверное лучше:
>>> import os
>>> filename, file_extension = os.path.splitext('/path/to/somefile.ext')
>>> print(os.path.splitext('/path/to/somefile.ext'))
('/path/to/somefile', '.ext')
>>> print(os.path.splitext('/path/to/somefile'))
('/path/to/somefile', '')
Какая-то жесть:
Почему нет реально правильного примера
numitus2 почему же жесть? Код работает на своих тестовых данных, для иллюстрации годится.
Выше была ссылка, кому надо будет учиться дальше.
А еще вы можете воспользоваться стандартной библиотекой os.path.splitext().
Ознакомиться с ней вы можете здесь.
По итогу у меня впечатление, что автору удалось объяснить проблему XY на примере, а научить работе с пакетом os или тем более pathlib он не собирался ;) Это лишь моя догадка.
«Мне нужно получить последние три символа в строке.»
«Нет, не нужно! Тебе нужно получить расширение файла.»
numitus2 еще раз спасибо, мне было бы лень внимательно читать статью без вашего замечания, а так я тоже начал приглядываться, возможно найдем еще неточности, поможем автору с качеством и при удачном стечении обстоятельств переводная статья станет точнее оригинала.
возможно найдем еще неточностиНу вот
например:
PS. Поначалу я думал, что при переводе перепутали, но нет — в оригинале статьи та жефигня путаница…
И это еще не конец. Вы можете использовать filter, чтобы получить тот же результат.Какой «тот же результат» мне не очень понятно, но как минимум, следующая за этой программой картинка с якобы результатом работы этой программы явно к ней не относится: цифры там должны быть (а не буквы) судя по тексту программы.
def get_numbers(input_char): if not isinstance(input_char,str): return True return False my_list = [1,2,3,'a','b','c'] check_list = filter(get_numbers, my_list) for items in check_list: print(items)
PS. Поначалу я думал, что при переводе перепутали, но нет — в оригинале статьи та же
К спискам я бы еще добавил крутые возможности по преобразованию их в множество (set). Т.к. после этого можно находить разность (пересечение) и сумму (объединение) множеств:
list( set(listA) — set(ListB) ) — выдай элемента списка А, отсутствующие в списке Б.
list( set(listA) — set(ListB) ) — выдай элемента списка А, отсутствующие в списке Б.
print (my_list.sort())
Опытный будет проверять свой код, прежде чем штамповать необязательные обучающие материалы.
>>> type(a.sort())
NoneType
Посмотрите, как мы их перемешали. Если мы попробуем отсортировать полученный список, то получим ошибку.
Возврат в точности как в статье:
$ python3
Python 3.8.0 (v3.8.0:fa919fdf25, Oct 14 2019, 10:23:27)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> my_list = ['a' , 'b' , 'n' , 'x' , 1 , 2 , 3, 'a' , 'n' , 'b']
>>> my_list.sort()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'int' and 'str'
Объясните, CrazyOpossum что не так с интерпретатором python3?
Опытный будет проверять свой код, прежде чем штамповать необязательные обучающие материалы.
Я неприятно удивлен вашим комментом и не понимаю его ценности. Что у вас CrazyOpossum
в «a» лежит, что вы сортируете?
В статье можно было опустить print(), и просто написать my_list.sort(). Этого хватит для вызова ошибки. CrazyOpossum указывает на то, что если сортировка пройдет успешно, то print выведет None. Так как my_list.sort() ничего не возвращает.
Но пассаж про «необязательные обучающие материалы» осуждаю.
Но пассаж про «необязательные обучающие материалы» осуждаю.
Я вижу, что человек обращается с методом, модифицирующем объект, как с методом, возвращающим данные. Это обычная ситуация в Питоне, когда не помнишь (и не нужно помнить), работают ли in-place list.sort, list.reverse, set.update и другие методы, или же конструируют новый объект. У автора эту попытку print(mylist.sort()) я воспринимаю именно как небрежность и самоуверенность, что в образовательных материалах недопустимо. Кстати, статья называется «9 навыков...», а рассказывает про 8.
def get_numbers(input_char):
if not isinstance(input_char,str):
return True
return False
А можно сразу сделать так (без условного оператора)?
return not isinstance(input_char,str)
Про процедуры и функции — вы раньше с 1С случайно не работали? :)
Процедура — та же функция, только тип возвращаемого значения у нее свой. :)
print(f'{each}')
Серьезно? Давайте пихать f-строки везде. Этот код абсолютно эквивалентен следующему:
print(each)
А по подводу PEP8: ну расставьте в примерах пустые строки как рекомендовано что ли
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
9 навыков программирования на Python, которые отличают новичка от опытного