如何使用 os.walk 中的 Python 中的 natsort 对文件夹名称进行排序?
How to sort folder names with natsort in Python that I got with os.walk?
我是 Python 的新手。
我必须爬过许多文件夹并检查特定文件。如果此文件在此文件夹中,则文件夹的名称将附加在列表的末尾。之后我希望文件夹的名称自然排序。
我尝试了 natsort 包的 natsorted(filename)
,但不知何故它没有对列表进行排序。
我的代码:
for dirName, subdirList, fileList in os.walk(folder):
if mat_file in fileList:
input_path = dirName + r"\file.txt"
if os.path.isfile(input_path):
filename.append(str(dirName.strip(folder)))
natsorted(filename)
print filename
folder
是文件夹的路径
我得到了:
['1.1', '1.10', '1.2', '1.4', '1.6', '2.1', '2.10', '2.11', '2.12', '2.6']
我要:
['1.1', '1.2', '1.4', '1.6', '1.10', '2.1', '2.6', '2.10', '2.11', '2.12']
这个问题有解决办法吗?
因为 natsorted
像 sorted
不会像 .sort()
那样改变列表,您需要将 natsorted(filename)
的 return 值分配回filename
变量如:
filename = natsorted(filename)
拆分每个版本字符串以将其作为整数列表进行比较:
filename.sort(key=lambda s: map(int, s.split('.')))
def sort_key(x):
a, b = x.split('.')
return int(a), int(b)
sorted(filename, key=sort_key)
我是 Python 的新手。
我必须爬过许多文件夹并检查特定文件。如果此文件在此文件夹中,则文件夹的名称将附加在列表的末尾。之后我希望文件夹的名称自然排序。
我尝试了 natsort 包的 natsorted(filename)
,但不知何故它没有对列表进行排序。
我的代码:
for dirName, subdirList, fileList in os.walk(folder):
if mat_file in fileList:
input_path = dirName + r"\file.txt"
if os.path.isfile(input_path):
filename.append(str(dirName.strip(folder)))
natsorted(filename)
print filename
folder
是文件夹的路径
我得到了:
['1.1', '1.10', '1.2', '1.4', '1.6', '2.1', '2.10', '2.11', '2.12', '2.6']
我要:
['1.1', '1.2', '1.4', '1.6', '1.10', '2.1', '2.6', '2.10', '2.11', '2.12']
这个问题有解决办法吗?
因为 natsorted
像 sorted
不会像 .sort()
那样改变列表,您需要将 natsorted(filename)
的 return 值分配回filename
变量如:
filename = natsorted(filename)
拆分每个版本字符串以将其作为整数列表进行比较:
filename.sort(key=lambda s: map(int, s.split('.')))
def sort_key(x):
a, b = x.split('.')
return int(a), int(b)
sorted(filename, key=sort_key)