尝试对长列表进行排序时出现TypeError

时间:2020-03-10 01:20:32

标签: python list sorting

我有一个可以排序的项目列表,它们的形式为:

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:

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

我怀疑这是因为files的输出在末尾包含了该信息:

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

我不一定需要使用列表,我只需要能够遍历文件并将每个文件中的信息用作类的输入。我认为这种方法是最简单的方法,因为遍历它们通常不会出于任何原因对它们进行排序。

2 个答案:

答案 0 :(得分:2)

您可能正在隐藏变量。

对于os.walk(rootdir)中的root,subdirs,文件文件 .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 :(得分:0)

您的列表中可能有不可比较的数据类型。您一定不能也不能在彼此不同的数据类型上使用“排序”。

在您的情况下,列表中有一个列表,例如下方:

data = ['a','b','d',['1','2']]
打印(排序(数据))

已排序数据之上肯定会引发“ TypeError:'<'在'list'和'str'实例之间不支持”

使用“ isinstance(data,list)”对文件进行一些检查,如果返回True,则扩展而不是追加。

以下代码示例: 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)