Как в цикле 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 шт):

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

воспользуйтесь встроенной функцией isinstance():

if isinstance(filenames, str):
    filenames = [filenames]

for filename in filenames:
    ...
→ Ссылка
Автор решения: asanisimov

Если вы не знаете сколько файлов будете обрабатывать, то можно использовать функцию с *args не известным кол-во аргументов.

def work(*args):
    for file in args:
        print(file)


work('first.txt') # first.txt
work('first.txt', 'second.txt') # first.txt
                                # second.txt

→ Ссылка