TypeError при попытке сортировки длинного списка - PullRequest
0 голосов
/ 10 марта 2020

У меня есть список элементов, которые можно отсортировать, они имеют вид:

example_files = ['LJ028-0299.txt', 'LJ029-0000.txt', 'LJ001-3214.txt']

, где отсортировано возвращает

['LJ001-3214.txt', 'LJ028-0299.txt', 'LJ029-0000.txt']

Однако у меня есть папка ~ 13 000 файлы и нужно их отсортировать в списке. Я добавил их в список:

for root, subdirs, files in os.walk(rootdir):
    files.append(files)

Но при выполнении sorted(files) я получаю ошибку типа:

TypeError: '<' not supported between instances of 'list' and 'str'

Я подозреваю, что это потому, что вывод files включает это в конце:

'LJ010-0151.txt', 'LJ027-0128.txt', [...]]

Мне не обязательно использовать список, мне просто нужно иметь возможность перебирать файлы и использовать информацию внутри каждого в качестве входных данных для класса. Я подумал, что этот метод будет самым простым, поскольку их циклическое выполнение обычно не сортирует их по какой-либо причине.

Ответы [ 2 ]

3 голосов
/ 10 марта 2020

Возможно, вы скрываете свою переменную.

для root, подкаталогов, файлов в os.walk (rootdir): файлов .append ( файлов )

Вы пробовали:

file_list = []
for root, subdirs, files in os.walk(rootdir):
     file_list.append(files)
# access your list here

Или более короткий: file_list = [files for root, subdirs, files in os.walk(rootdir)]

1 голос
/ 10 марта 2020

Возможно, в вашем списке Несопоставимые типы данных . Вы не должны и не можете использовать «сортировку» для типов данных, которые отличаются друг от друга.

В вашем случае у вас есть список в списке, например ниже:

data = ['a ',' b ',' d ', [' 1 ',' 2 ']]
print (отсортировано (данные))

Выше отсортировано данные определенно вызовут ошибку "TypeError : «<» не поддерживается между экземплярами «list» и «str». * </p>

сделайте некоторую проверку ваших файлов, используя "isinstance (data, list)", и, если вернете True extended вместо append.

пример кода ниже: rootdir.txt содержит:
'a'
['1', '2']

list_text = []    
with open ('rootdir.txt', 'r') as files:
    for text in file:
        if isinstance(text, list):
            list_text.extend(text)
        else
            list_text.append(text)

Я только что заметил, что вы использовали файлы для добавить «файлы». Объявите еще один пустой список и добавьте туда файлы , которые могут на самом деле решить вашу проблему.

data_in_files = []
for root, subdirs, files in os.walk(rootdir):
    data_in_files.append(files)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...