Windows资源管理器文件名排序
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的解决方案
通过pip安装natsort库:
pip install natsort;设置当前语言环境为zh_CN.UTF-8:
import locale
locale.setlocale('zh_CN.UTF-8')
- 导入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)
参考材料
- python对列表排序之高级模块natsort
- Python对os.listdir()获取的文件列表进行Windows的按名称方式排序,natsort库的应用
- Python在windows下自然排序
- 十七、实现Windows中的文件名排序
- natsort · PyPI
- 自然排序和定制排序
Windows资源管理器文件名排序的更多相关文章
- 使用windows资源管理器的排序规则
对于windows资源管理器 abc_1_def是要排到abc_10_def前面的 而一般的排序规则, 都会吧_10_排到前面 所以为了使用习惯, 最好用资源管理器的排序规则, windows有个AP ...
- windows资源管理器(只能看,不能用)
实现Windows资源管理器 问题描述 Windows资源管理器是用来管理计算机资源的窗口,电脑里所有的文件都可以在资源管理器里找到,可以在资源管理器里查看文件夹的分层结构,可以利用资源管理器快速进行 ...
- 怎样在Windows资源管理器中添加右键菜单以及修改右键菜单顺序
有时,我们需要在Windows资源管理器的右键菜单中添加一些项,以方便使用某些功能或程序. 比如我的电脑上有一个免安装版的Notepad++,我想在所有文件的右键菜单中添加一项用Notepad++打开 ...
- SVN has atopping svn已停止工作 or windows资源管理器无限重启
准备在空间时间用用linux,就在自己的win7系统上安装了属性系统,用easyBCD安装的,谁知安装好之后win7系统下的svn客户端不能使用了,点击报错“SVN已停止工作”,随后怀疑是linux引 ...
- SharePoint 2010 "客户端不支持使用windows资源管理器打开此列表" 解决方法
SharePoint 2010 在“库”--“库工具”,有一个“使用资源管理器打开”的按钮,点上去报“客户端不支持使用windows资源管理器打开此列表”.如图: 解决方案:在“开始”--“管理工具” ...
- sqlserver和Windows资源管理器争用内存
sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是
- 为Windows资源管理器右键菜单添加菜单项
为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...
- 出现“Windows资源管理器已停止工作”错误
出现"Windows资源管理器已停止工作"错误 什么是资源管理器呢,explorer.exe进程的作用就是让我们管理计算机中的资源! 今天开电脑的时候就一直提示windows资源管 ...
- windows资源管理器多标签打开 windows文件夹多标签浏览 浏览器tab页面一样浏览文件夹 clover win8 win10 报错 无响应问题怎么解决 clover卡死 clover怎么换皮肤
大家都知道,我们打开一堆文件夹的时候,是什么样子 “厚厚的一叠”图标堆叠在一起的,非常的不方便 那么,是不是可以像浏览器一样的tab页面展示呢? 答案是可以的 安装好就是这样子的 是不是方便漂亮了很多 ...
随机推荐
- Spring Boot整合Redis-转载
Spring Boot整合Redis的三中方式的博客: https://wangsong.blog.csdn.net/article/details/103210490 使用spring.cache. ...
- python爬取今日头条图片
import requests from urllib.parse import urlencode from requests import codes import os # qianxiao99 ...
- FastDFS 原理、安装、使用
介绍 技术论坛: http://bbs.chinaunix.net/forum-240-1.html FAQ:http://bbs.chinaunix.net/thread-1920470-1-1.h ...
- 不想业务被中断?快来解锁华为云RDS for MySQL新特性
摘要:新特性上线!华为云RDS for MySQL又添新技能,实力保障业务连续性. 本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:Gauss ...
- Java 框架、库和软件的精选列表(awesome java)
原创翻译,原始链接 本文为awesome系列中的awesome java Awesome Java Java 框架.库和软件的精选列表 项目 Bean映射 简化 bean 映射的框架 dOOv - 为 ...
- SpringBoot:自定义注解实现后台接收Json参数
0.需求 在实际的开发过程中,服务间调用一般使用Json传参的模式,SpringBoot项目无法使用@RequestParam接收Json传参 只有@RequestBody支持Json,但是每次为了一 ...
- 说说&和&&的区别?
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false.
- 什么是feigin?它的优点是什么?
1.feign采用的是基于接口的注解2.feign整合了ribbon,具有负载均衡的能力3.整合了Hystrix,具有熔断的能力使用:1.添加pom依赖.2.启动类添加@EnableFeignClie ...
- BeanFactory和ApplicationContext有什么区别?
BeanFactory和ApplicationContext是Spring的两大核心接口,都可以当做Spring的容器.其中ApplicationContext是BeanFactory的子接口. (1 ...
- A5/web项目连接Oracle 12c数据库报:ORA-01017: 用户名/口令无效
解决办法: 修改Oracle12c用户名密码,再改回来,就ok了,亲测有效.