我有一个可以排序的项目列表,它们的形式为:
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', [...]]
我不一定需要使用列表,我只需要能够遍历文件并将每个文件中的信息用作类的输入。我认为这种方法是最简单的方法,因为遍历它们通常不会出于任何原因对它们进行排序。
答案 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)