Windows资源管理器文件名排序

这学期担任了本科生教学助教,平时有逐个批改学生作业(作业通常按学生名字进行命名)然后记录成绩到另外一个文件的需求。为了加快批改作业的效率,考虑把作业文件夹里面的作业的文件名抽取出来,拷贝到成绩文件里面,这样当按照Windows资源管理器排的顺序批改完作业后,可以很快地把成绩加到作业文件名的后面(顺序是一致的,登记成绩时省了找作业对应的学生所在位置的时间)。

想法是美好的,现实是打脸的:通过Python遍历目录得到的文件名和Windows资源管理器中显示的文件名的顺序是不一样的,比如Python遍历目录得到文件名列表是['万xx.jpg', '何xx.jpg', '何xx.jpg', '余xx.jpg'],而Windows资源管理器中显示的却是['安xx.jpg', '白x.jpg', '曹xx.jpg', '陈xx.jpg']。一开始我以为后者是按拼音进行排序的,还尝试了安装能够把中文转换成拼音的模块,基于文件名的拼音进行排序,但实际上该顺序与通过拼音得到的顺序仍然有部分不同。通过网上查阅资料发现,Windows资源管理器是按照所谓的自然排序的方法进行排序的。

背景:自然排序

什么是自然排序?

“naturally” is rather ill-defined, but in general it means sorting based on meaning and not computer code point

怎样按自然排序的规则进行排序?

  • Java的类可以通过实现Comparable接口、重写compareTo方法指定自然排序的规则;

  • Python通过为函数list.sort或sorted的key参数指定排序规则即可,比如:sorted(['a', 'b', 'c', 'A', 'B', 'C'], key=str.lower)得到['a', 'A', 'b', 'B', 'c', 'C']

基于Python的解决方案

  1. 通过pip安装natsort库: pip install natsort

  2. 设置当前语言环境为zh_CN.UTF-8:

import locale
locale.setlocale('zh_CN.UTF-8')
  1. 导入natsort库进行排序:natsorted(filenames, alg=ns.LOCALE)

完整代码如下:

import locale
from pathlib import Path from natsort import natsorted, ns locale.setlocale('zh_CN.UTF-8')
basedir = Path('path/to/folder')
filenames = [file.stem for file in basedir.iterdir()] # file.stem表示取文件的名字(不包含文件扩展名)
filenames_sorted = natsorted(names, alg=ns.LOCALE)
print(filenames_sorted)

参考材料

  1. python对列表排序之高级模块natsort
  2. Python对os.listdir()获取的文件列表进行Windows的按名称方式排序,natsort库的应用
  3. Python在windows下自然排序
  4. 十七、实现Windows中的文件名排序
  5. natsort · PyPI
  6. 自然排序和定制排序

Windows资源管理器文件名排序的更多相关文章

  1. 使用windows资源管理器的排序规则

    对于windows资源管理器 abc_1_def是要排到abc_10_def前面的 而一般的排序规则, 都会吧_10_排到前面 所以为了使用习惯, 最好用资源管理器的排序规则, windows有个AP ...

  2. windows资源管理器(只能看,不能用)

    实现Windows资源管理器 问题描述 Windows资源管理器是用来管理计算机资源的窗口,电脑里所有的文件都可以在资源管理器里找到,可以在资源管理器里查看文件夹的分层结构,可以利用资源管理器快速进行 ...

  3. 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序

    有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...

  4. SVN has atopping svn已停止工作 or windows资源管理器无限重启

    准备在空间时间用用linux,就在自己的win7系统上安装了属性系统,用easyBCD安装的,谁知安装好之后win7系统下的svn客户端不能使用了,点击报错“SVN已停止工作”,随后怀疑是linux引 ...

  5. SharePoint 2010 "客户端不支持使用windows资源管理器打开此列表" 解决方法

    SharePoint 2010 在“库”--“库工具”,有一个“使用资源管理器打开”的按钮,点上去报“客户端不支持使用windows资源管理器打开此列表”.如图: 解决方案:在“开始”--“管理工具” ...

  6. sqlserver和Windows资源管理器争用内存

    sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是

  7. 为Windows资源管理器右键菜单添加菜单项

    为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...

  8. 出现“Windows资源管理器已停止工作”错误

    出现"Windows资源管理器已停止工作"错误 什么是资源管理器呢,explorer.exe进程的作用就是让我们管理计算机中的资源! 今天开电脑的时候就一直提示windows资源管 ...

  9. windows资源管理器多标签打开 windows文件夹多标签浏览 浏览器tab页面一样浏览文件夹 clover win8 win10 报错 无响应问题怎么解决 clover卡死 clover怎么换皮肤

    大家都知道,我们打开一堆文件夹的时候,是什么样子 “厚厚的一叠”图标堆叠在一起的,非常的不方便 那么,是不是可以像浏览器一样的tab页面展示呢? 答案是可以的 安装好就是这样子的 是不是方便漂亮了很多 ...

随机推荐

  1. Spring中毒太深,离开了Spring,我居然连最基本的接口都不会写了¯\_(ツ)_/¯

    前言 众所周知,Java必学的框架其中就是SSM,Spring已经融入了每个开发人员的生活,成为了不可或缺的一份子. 随着 Spring 的崛起以及其功能的完善,现在可能绝大部分项目的开发都是使用 S ...

  2. docker之间如何通讯的

    Docker 查看容器 IP 地址   查看Docker的底层信息. docker inspect 会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息 docker inspect ...

  3. java-规约-日期和时间

    public class DateTime { public static void main(String[] args) { /**1 * 日期格式化时,传入的pattern表示年份统一用小写的y ...

  4. spring-boot-EnvironmentPostProcessor

    原理: 1-从启动类入口的run方法进入: public ConfigurableApplicationContext run(String... args) { -SpringApplication ...

  5. Oracle入门基础(九)一一创建表和管理表

    练习:查询每一年入职人数及总人数 SQL> select count(*) Total, 2 sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) & ...

  6. synchronized使用及原理解析

    修饰静态方法.实例方法.代码块 Synchronized修饰静态方法,对类对象进行加锁,是类锁. Synchronized修饰实例方法,对方法所属对象进行加锁,是对象锁. Synchronized修饰 ...

  7. 学习ELK日志平台(四)

    一:需求及基础: 场景: 1.开发人员不能登录线上服务器查看详细日志 2.各个系统都有日志,日志数据分散难以查找 3.日志数据量大,查询速度慢,或者数据不够实时 4.一个调用会涉及到多个系统,难以在这 ...

  8. 学习RabbitMQ(五)

    消息中间件就是在消息的传输过程中保存消息的容器.消息中间件再将消息从它的源中继到它的目标时充当中间人的作用.队列的主要目的是提供路由并保证消息的传递:如果发送消息时接收者不可用,消息队列会保留消息,直 ...

  9. 顺利通过EMC实验(5)

  10. 关于Echarts的填坑之旅

    正如标题所说,这是Echarts的一遍填坑,如果你是一些echart的配置的话可以阅读http://echarts.baidu.com/opti...的官网配置信息.今天我想给大家分享的是一些我前段时 ...