鱼C论坛

 找回密码
 立即注册
查看: 3278|回复: 8

[已解决]查询 重复 和 遗漏

[复制链接]
发表于 2022-2-20 18:28:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
比如E盘 sixmp3toxx文件夹内,期待格式: 序列递增***.mp3

1000三国.mp3,
1001三都的.mp3
1002大小的是.mp3
1003测试.mp3

但是,有可能错误编辑,导致文件名是:

1000三国.mp3,
1000三都的.mp3

1003测试.mp3

结果是: 1000 这个出现了重复,1002 开始命名的 文件遗漏, 都需要查询出来的思路。
最佳答案
2022-2-22 09:11:55
这个问题其实涉及的东西比较多,我们一个个说
首先,如何遍历文件夹中的文件名,比较方便的方法是使用os模块中的walk方法,如下:
import os
PATH="E:/BaiduNetdiskDownload"   # PATH为你的文件所在的目录
for path,dir_list,file_list in os.walk(PATH):   #这一句就是遍历PATH文件夹下的所有目录
    # file_list 为根目录中文件名的列表,path为根目录路径
    # 这里写你对文件的处理代码,可以是一下这样
    for file in file_list:
        #这里写对文件名的处理
    break # 如果只处理根目录中的文件,使用break目录遍历的for循环

其次,有了文件名列表,如何提取中其中的序号,方便后续做处理:
这里其实有个问题,你的描述中序号都是四位数,如果序号在最前面,但是从1开始的如何处理:
如果都是四位数比较好处理,如果文件名是file ,那么file[:4]就是序号,当然这个序号是字符串格式的,你可以int(file[:4]),也可以用字符串数字的方法
如果你的序号是从1开始,那可能借助正则比较方便一点,代码大概是这样的:
import re
# file为文件名,serial为从文件名中提取出来的序号,当然也是字符串格式的
serial = re.match(r'[0-9]*', file).group()

最后,实际中可能出现的问题很多,处理时其实要考虑的问题很多,如果不能提前考虑到,那调试的时候会很痛苦,尤其是很多初学者不使用vscode或者pycharm这种专门的编码工具,使用python自带的idle,运行过程中参数值的变化的跟踪是很繁琐的~~~
比如,重复的序号有没有可能在其他的位置,比如你的例子中1000重复了,有没有可能,他本来在999的位置,或者2000的位置。
同样的道理,看起来遗漏的文件,是否只是因为错误的命名,比如你的例子里"1000三都的.mp3"这个文件有没有可能序号是1002。


以上,抛砖引玉,基本上我想到的东西都说了下,如果说的有问题,欢迎来讨论~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-20 22:30:58 | 显示全部楼层
你的 疑问是啥
以及发发你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-2-21 08:50:31 | 显示全部楼层
比较快速的方法,python 导出文件名 到 txt,每个名一行,全部复制到 excel,左边前 4列 和 插入列 1---N,进行 减法,快速查询 为0的重复项,以及不为0的 项目。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-22 09:11:55 | 显示全部楼层    本楼为最佳答案   
这个问题其实涉及的东西比较多,我们一个个说
首先,如何遍历文件夹中的文件名,比较方便的方法是使用os模块中的walk方法,如下:
import os
PATH="E:/BaiduNetdiskDownload"   # PATH为你的文件所在的目录
for path,dir_list,file_list in os.walk(PATH):   #这一句就是遍历PATH文件夹下的所有目录
    # file_list 为根目录中文件名的列表,path为根目录路径
    # 这里写你对文件的处理代码,可以是一下这样
    for file in file_list:
        #这里写对文件名的处理
    break # 如果只处理根目录中的文件,使用break目录遍历的for循环

其次,有了文件名列表,如何提取中其中的序号,方便后续做处理:
这里其实有个问题,你的描述中序号都是四位数,如果序号在最前面,但是从1开始的如何处理:
如果都是四位数比较好处理,如果文件名是file ,那么file[:4]就是序号,当然这个序号是字符串格式的,你可以int(file[:4]),也可以用字符串数字的方法
如果你的序号是从1开始,那可能借助正则比较方便一点,代码大概是这样的:
import re
# file为文件名,serial为从文件名中提取出来的序号,当然也是字符串格式的
serial = re.match(r'[0-9]*', file).group()

最后,实际中可能出现的问题很多,处理时其实要考虑的问题很多,如果不能提前考虑到,那调试的时候会很痛苦,尤其是很多初学者不使用vscode或者pycharm这种专门的编码工具,使用python自带的idle,运行过程中参数值的变化的跟踪是很繁琐的~~~
比如,重复的序号有没有可能在其他的位置,比如你的例子中1000重复了,有没有可能,他本来在999的位置,或者2000的位置。
同样的道理,看起来遗漏的文件,是否只是因为错误的命名,比如你的例子里"1000三都的.mp3"这个文件有没有可能序号是1002。


以上,抛砖引玉,基本上我想到的东西都说了下,如果说的有问题,欢迎来讨论~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 08:06:18 | 显示全部楼层

封装代码,执行任务完成特定功能:实现函数

复用代码;隐藏细节,提高维护性,提高可读性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-19 08:20:07 | 显示全部楼层
形参,实参;传递: 关键字实参 和 位置实参;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-20 09:24:31 | 显示全部楼层
函数体内的修改,不会影响 实参的值------------错。

P89: 可变对象,还是不可变对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-20 09:42:41 | 显示全部楼层
视频:100秒分清python中的可变对象和不可变对象

学习编程王同学
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-23 09:40:06 | 显示全部楼层
import datetime

today = datetime.datetime.now()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 13:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表