Как в цикле for корректно принимать типы строка или список?
Есть цикл для обработки файлов:
for filename in filenames:
Файл может быть один или несколько.
Если на цикл подать 1 файл в виде строки, то получится: разбиение по символам:
f i l e . t x t
list(filenames) даёт разбиение f i l e . t x t
[filenames] строку превращает в список без разбиения ['file.txt']
А вот список [filenames] превращает в список в списке [['file1.txt', 'file2.txt']], что нарушает цикл.
Понятно, что можно один файл передавать в виде списка как ['file.txt'] и не париться.
Однако, для других подобных задач хочется понять, когда нельзя повлиять на ввод значений.
Какие есть способы переводить строку в список без посимвольного разбиения?
Ответы (2 шт):
воспользуйтесь встроенной функцией isinstance():
if isinstance(filenames, str):
filenames = [filenames]
for filename in filenames:
...
Если вы не знаете сколько файлов будете обрабатывать, то можно использовать функцию с *args не известным кол-во аргументов.
def work(*args):
for file in args:
print(file)
work('first.txt') # first.txt
work('first.txt', 'second.txt') # first.txt
# second.txt