Python 未排序的文件名集
我正在使用带有生成器的Python 未排序的文件名集,python,Python,我正在使用带有生成器的os.walk来填充一组文件名,以便以后使用以下内容进行操作: file_path = '/home/user/Developer/10/' list_of_files = {} cnt = 0 for (dirpath, dirnames, filenames) in os.walk(file_path): for filename in filenames: if filename.endswith('.xml'): li
os.walk
来填充一组文件名,以便以后使用以下内容进行操作:
file_path = '/home/user/Developer/10/'
list_of_files = {}
cnt = 0
for (dirpath, dirnames, filenames) in os.walk(file_path):
for filename in filenames:
if filename.endswith('.xml'):
list_of_files[cnt] = os.sep.join( [dirpath, filename] )
cnt += 1
用列表\u文件
排序为:
{0: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183126.585.xml',
1: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183216.572.xml',
2: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183123.015.xml',
3: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183058.016.xml',
4: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183130.151.xml',
5: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183140.873.xml',
6: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183223.729.xml',
7: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183054.451.xml',
8: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183148.014.xml',
9: '/home/user/Developer/10/2/test/channe 1_UTC_DEtoSE_183202.296.xml'}
我知道python在填充列表时不会对文件名进行排序,但我的印象是集合是自排序的?如果没有,我如何按文件名按字母数字排序?如果我使用
sorted()
If返回一个带有集合元素编号的列表对象,这是非常无用的。正如注释所指出的,list\u of\u files
是一个字典,而不是集合。将文件的列表更改为空列表,并使用append()进行初始化,例如:
这就是诀窍
感谢您及时提供的宝贵意见 您可以使用pathlib模块仅通过一个dict理解来提取所有XML文件
from pathlib import Path
file_path = Path('./home/user/Developer/10/')
list_of_files = {
index: str(xml_file.absolute())
for index, xml_file in enumerate(file_path.glob('**/*.xml'))
}
list_of_files = dict(sorted(list_of_files.items(),key=lambda x:x[0])) # sort dict based on values
我不确定下面的片段是否会有所帮助;基本上,您可以按字典的值(而不是键)排序
这里使用的不是集合,而是dict。在最近的Python版本中,dict是按插入顺序迭代的,根据以前版本中的元素散列值以任意顺序迭代。如果您使用的是集合,那么在任何Python版本中都会得到任意顺序。这些数据类型的内部细节经过优化,以实现尽可能快的操作;按排序的顺序生成输出会严重减慢速度。这不是一个集合,而是一个字典,默认情况下,它本质上是无序的,或者在插入值时是有序的。(但布景也是无序的)。您必须将其转换为其他对象类型(list、np.array、dataframe等),以便进行排序。或者只是更改代码,将文件名收集到其他文件中,而不是字典中。参见此,了解更多信息:感谢二者指出我的误解,即重复记录与集合。集合也不是自排序的-集合没有特定的顺序。
from pathlib import Path
file_path = Path('./home/user/Developer/10/')
list_of_files = {
index: str(xml_file.absolute())
for index, xml_file in enumerate(file_path.glob('**/*.xml'))
}
list_of_files = dict(sorted(list_of_files.items(),key=lambda x:x[0])) # sort dict based on values
for v in sorted(list_of_files.values()):
print(v)