用python管理自己的音乐文件夹

这是一个用python3 和 mutagen库编写用来管理自己音乐文件夹的脚本。学习python挺久了,终于能写个有点用的东西了。源代码入下:

不过感觉写得太长了,像这样一个脚本好像几十行就能解决,

求各路大神指点!!!

  1 import os
  2 from mutagen.mp3 import MP3
  3 import mutagen.id3
  4 from mutagen.easyid3 import EasyID3
  5 global illegel_letter
  6 illegel_letter = (‘\\‘, ‘/‘, ‘:‘, ‘*‘, ‘?‘, ‘<‘, ‘>‘, ‘|‘)
  7
  8
  9 def hello():
 10     print(‘-‘ * 74)
 11     s = ‘‘‘
 12     #####################################################################
 13     #       这个脚本是用来整理你的音乐文件夹的,它可以将你的音乐        #
 14     #          按照"歌手\专辑\歌曲"的形式整理到各自的文件夹中           #
 15     #                                                                   #
 16     #---    ----    ----    ----    ----    ----    ----    ----    ----#
 17     #               **注:程序只处理MP3文件, 其他忽略**                 #
 18     #####################################################################
 19         ‘‘‘
 20     print(s)
 21     print(‘-‘ * 74)
 22     d = ‘‘‘
 23         输入 s 开始整理; 输入 q 退出
 24         ‘‘‘
 25     print(d)
 26
 27
 28 def is_mp3(mp3):
 29     ‘‘‘判断是否为MP3文件
 30     ‘‘‘
 31     m = mp3.split(‘.‘)
 32     if m[-1] == ‘mp3‘:
 33         return True
 34     else:
 35         return False
 36
 37
 38 def get_album(id3info):
 39     ‘‘‘获取MP3的专辑信息
 40     ‘‘‘
 41     if ‘album‘ not in id3info:
 42         album = ‘unknown album‘
 43     else:
 44         album = id3info[‘album‘][0]
 45     return album
 46
 47
 48 def get_artist(id3info):
 49     ‘‘‘获取MP3文件的歌手信息
 50     ‘‘‘
 51     if ‘artist‘ not in id3info:
 52         artist = ‘unknown artist‘
 53     else:
 54         artist = id3info[‘artist‘][0]
 55     return artist
 56
 57
 58 def check_name(filename):
 59     ‘‘‘检查文件夹的名字是否合法
 60        Check if directory is legal
 61     ‘‘‘
 62     s = ‘‘
 63
 64     # 去除文件名结尾的‘.‘
 65     length = len(filename)
 66     while filename[length-1] == ‘.‘:
 67         length = length - 1
 68
 69     # 除去文件名中非法字符
 70     for i in range(length):
 71         if filename[i] not in illegel_letter:
 72             s += filename[i]
 73     return s
 74
 75
 76 def get_music_dirc():
 77     s = ‘‘‘
 78         请输在下面输入你的音乐文件夹的位置
 79         例如 :(不区分大小写)
 80         E:\\Users\\Music
 81         C:\\SomeWhere\\MyMusicFile
 82         D:\\kuwodownload
 83         ‘‘‘
 84     print(s)
 85
 86     T = 1
 87     while  T:
 88         music_dir = input(‘音乐文件夹所在位置:>>> ‘)
 89         if os.path.isdir(music_dir):
 90             return music_dir
 91             T = 0
 92         else:
 93             print(‘你输入的路径不存在,请重新输入‘)
 94     return music_dir
 95
 96
 97 def clear_empty(music_dir):
 98     print(‘***开始清理空文件夹***‘)
 99
100     # 重新扫描路径
101     results = os.walk(music_dir)
102
103     # 如果为空文件夹则删除
104     for root, dirc, filename in results:
105         if (len(dirc)==0) & (len(filename)==0):
106             try:
107                 os.rmdir(root)
108                 print(‘已清除>>> %s‘ %root )
109             except:
110                 print(‘T_T 未能清除空文件夹‘)
111                 return
112     print(‘***   CLEAR OK  ***‘)
113     print(‘\n‘)
114
115
116 def echo_list(u=[]):
117     ‘‘‘输出列表中的每一项
118     ‘‘‘
119     print(‘***  start  ***‘)
120     for i in range(len(u)):
121         for j in range(len(u[i])):
122                 print(u[i][j])
123         print(‘-‘ * 70)
124
125
126 def echo_info(h):
127     ‘‘‘通过询问用户意愿输出详细信息
128     ‘‘‘
129     print(‘是否逐条查看详细信息? <输入 y 查看, 输入 n 过>‘)
130
131     T = 1
132     while T:
133         YesOrNo = input(‘y / n ?>>> ‘)
134         if YesOrNo == ‘y‘:
135             for j in range(len(h)):
136                 print(‘%s info:‘ % h[j])
137                 echo_list(u[j])
138                 print(‘\n‘)
139
140             T = 0
141         elif YesOrNo == ‘n‘:
142             print(‘未查看详细信息‘)
143             T = 0
144         else:
145             print(‘有效命令为:y / n‘)
146
147
148 def change_dirc(src, dst):
149     ‘‘‘把文件从 源路径(src) 移动到 目标路径(dst)
150     ‘‘‘
151
152     # 拆分路径和文件名
153     split_src = os.path.split(src)[0]
154     name = os.path.split(src)[-1]
155
156     # 如果两路径相同则输出“位置正确”
157     if src == dst:
158         k = os.path.split(dst)
159         return ‘未移动文件: ‘, (k[-1], k[0])
160
161     # 如果源路径和目标路径不同, 则进行如下操作
162     else:
163         try:
164             os.rename(src, dst)
165             return ‘已移动文件: ‘, (src, dst)
166         except FileExistsError as e:
167             return ‘重复文件: ‘, (src, dst)
168
169
170 def start(results):
171
172     # 声明变量
173     # 用来统计MP3文件数量和保存处理时的信息
174     __total__ = 0
175     SameFile = []
176     MovedFile = []
177     UnMovedFile = []
178
179     # 处理这个目录下的每个文件
180     for root, dirc, files in results:
181
182         # 对每个文件:
183         for filename in files:
184
185             # 如果是MP3文件,则:
186             if is_mp3(filename):
187
188                 # 获取这个MP3文件的当前路径
189                 m_dirc = os.path.join(root, filename)
190
191                 # 获取MP3文件的 id3 信息
192                 id3info = MP3(m_dirc, ID3=EasyID3)
193
194                 # 从 id3 信息中取得歌手和专辑,并检查是否为合法文件名
195                 artist = check_name(get_artist(id3info))
196                 album = check_name(get_album(id3info))
197
198                 # 目标文件路径
199                 new_dirc = os.path.join(music_dir, artist, album, filename)
200
201                 # 改变文件路劲
202                 h, r = change_dirc(m_dirc, new_dirc)
203                 if h == ‘未移动文件: ‘:
204                     UnMovedFile.append(r)
205                 elif h == ‘已移动文件: ‘:
206                     MovedFile.append(r)
207                 else:
208                     SameFile.append(r)
209
210                 # 统计MP3文件数目
211                 __total__ = __total__ + 1
212
213     print(‘-- mission completed --‘)
214     print("total: %d of songs" % __total__)
215     return [‘同名‘, ‘已移动‘, ‘未移动‘], [SameFile, MovedFile,UnMovedFile]
216
217
218 if __name__ == ‘__main__‘:
219
220     __author__ = ‘ven‘
221
222     # 输出欢迎信息及提示
223     hello()
224
225     # 主循环
226     T = 1
227     while T:
228         user_input = input(‘s / q ?>>> ‘)
229
230         if user_input == ‘s‘:
231             music_dir = get_music_dirc()
232
233             # 遍历用户给出的目录
234             try:
235                 results = os.walk(music_dir)
236                 print(‘:) 成功遍历当前目录‘)
237             except:
238                 print(‘:( 未能遍历当前目录‘)
239
240             # 处理每个MP3文件
241             h, u = start(results)
242
243             # 输出统计信息
244             print(‘\n‘)
245             for i in range(len(u)):
246                 print(‘%s: %s‘ % (h[i], len(u[i])))
247                 print(‘-‘ * 70)
248
249             # 输出详细信息
250             print(‘\n‘)
251             echo_info(h)
252
253             # 清楚空文件夹
254             print(‘\n‘)
255             clear_empty(music_dir)
256
257             T = 0
258         elif user_input == ‘q‘:
259             T = 0
260         else:
261             print(‘未知指令,请重新输入‘)
262
263     input(‘现在任务已经完成了,按Enter键退出‘)
时间: 2024-08-28 08:48:21

用python管理自己的音乐文件夹的相关文章

Python封装一个函数接受文件夹的名称作为输入参数,打印该文件夹中的的全部路程信息(遍历路径)

Python时间简单的遍历文件夹路径,代码如下:import os def bianli(path):info = os.listdir(path)for v in info:p = os.path.join(path, v)print(p)if os.path.isdir(p):bianli(p)bianli('D:/重命名') 实现效果如下: 原文地址:http://blog.51cto.com/13241097/2115031

Python批量按顺序命名文件夹

1 """ Python批量按顺序命名文件夹 """ 2 import os 3 4 path1 = 'E:/侯俊龙数据/1' # 所需修改文件夹所在路径 5 dirs = os.listdir(path1) 6 7 i = 1 8 for dir in dirs: 9 print(dir) 10 os.rename(os.path.join(path1, dir), os.path.join(path1, str(dir[:3])+str(&q

python sftp.get 同步远程文件夹 实践二

主要用途,从本机获取远端机器的文件夹 #!/usr/bin/python    import pexpect import paramiko   import os import sys import time import multiprocessing import datetime import crash_on_ipy from stat import S_ISDIR    ip_list = [] #room_id = sys.argv[1] cur_time = datetime.d

用python脚本通过excel生成文件夹树结构

大概这样写标题是对的吧... 目标: 通过excel目录结构文档生成文件夹树结构. 也就是: 通过下面的excel 生成下面的文档树结构: 方法: 1.分析:一般文档结构都是事先构思好.可以在txt文档里打草稿,粘贴至excel.如下: 这里要注意一个问题:从txt文档 -> excel文档粘贴时,默认如果txt分级为空格,那么在excel里只能是一列.如果在txt分级为tab,那么在excel中各为一列.当然,可以自己进行设置. 2.对excel文档结构进行路劲补全.如图: 3.写py脚本:

Python 的 pyinotify 模块 监控文件夹和文件的变动

官方参考: https://github.com/seb-m/pyinotify/wiki/Events-types https://github.com/seb-m/pyinotify/wiki/Install 最近在网上看到python有个pyinotify模块,其中他们可以监控文件夹内的文件的创建,修改,读取,删除等系列操作,我修改了下,添加了可以吧操作记录写到日志里的一点方法,下面就贴出代码了给大家分享下:#!/usr/bin/env python ? 01 02 03 04 05 06

python中的包和文件夹的区别

python的模块,就不得不说包(package),package是module的集合,在一个package中有很多的module, 还是以之前的index.py与baiduHq.py模块为案例,说明包的使用,新建baidu包,切记包与文件夹最明显的 区别是包有__init__,而文件夹没有,见下图 新建baidu和index两个包,分别编写baiduHq.py和index.py 那在index包下的index.py怎么调用baidu包下的baiduHq.py中的函数,类了?见实现的过程 原文地

Python实现重命名一个文件夹下的图片

在网上查了一下python实现的图片重命名,工作中刚好用一下. 1 # -*- coding:utf8 -*- 2 import os 3 path = '新建文件夹 (2)/' 4 filelist = os.listdir(path) 5 for item in filelist: 6 # print('item name is ',item) 7 if item.endswith('.jpg'): 8 name = item.split('.',1)[0] 9 src = os.path.

python zlib 压缩 解压 文件夹

import os,os.path import zipfile def zip_dir(dirname,zipfilename): filelist = [] if os.path.isfile(dirname): filelist.append(dirname) else : for root, dirs, files in os.walk(dirname): for name in files: filelist.append(os.path.join(root, name)) zf =

python 脚本(获取指定文件夹、指定文件格式、的代码行数、注释行数)

1.代码的运行结果: 获取 指定文件夹下.指定文件格式 文件的: 总代码行数.总注释行数(需指定注释格式).总空行数: 1 #coding: utf-8 2 import os, re 3 4 # 代码所在目录 5 FILE_PATH = './' 6 7 def analyze_code(codefilesource): 8 ''' 9 打开一个py文件,统计其中的代码行数,包括空行和注释 10 返回含该文件总行数,注释行数,空行数的列表 11 ''' 12 total_line = 0 13