Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84596
  • 博文数量: 25
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 98
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-10 00:42
文章分类

全部博文(25)

分类: Python/Ruby

2018-03-23 21:15:10

先叙述下事件缘由。。。   
  这两天不知道哪根经出了问题,想入个播放器耍耍,最终在大法的NW-A45和山灵的M3S之间抉择。大法的操控好,颜值高,但性能据说被山灵掉打。。最终选择了充值信仰(捂脸。。
   
   大法提供了一个叫Music Center for PC的音乐同步软件,用了下,发现同步到播放器上后,就算是同一个播放列表下的文件,也会自动按表演者将生成对应独立的文件夹,这就造成播放器里一堆文件夹,很不爽。。。

    现在想要实现的是:把一些音乐放在一个文件夹内,然后有一个对应的播放列表。这样播放器内就能变的清爽些

    看下Music Center for PC生成的m3u列表文件什么样的:

点击(此处)折叠或打开

  1. #EXTM3U
  2. #EXTINF:277,No differences
  3. 澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\01 No differences.flac
  4. #EXTINF:177,AZPV
  5. 澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\02 AZPV.flac
  6. #EXTINF:228,A-0picturez
  7. 澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\03 A-0picturez.flac
  8. #EXTINF:222,MKAlieZ
  9. 澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\04 MKAlieZ.flac
  10. #EXTINF:229,2零14zero91零
  11. 澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\05 2零14zero91零.flac
  12. #EXTINF:238,アZ-Kat
  13. 澤野 弘之\アルドノア?ゼロ オリジナル?サウンドトラック\06 アZ-Kat.flac
    第1行#EXTM3U是必须的。第2行是第一个音频文件的一些信息,包括时长(单位,秒),标题。第3行是第一个音频文件的路径。
    另外,该m3u文件是 UTF-8-BOM编码的。
   
    目录结构是:
     - WALKMAN
            ---(其他的目录和文件)
            --- LEARNING(文件夹
            --- MUSIC(文件夹)
              --- Aldnoah.Zero.m3u(播放列表文件)
              ---澤野 弘之(文件夹
                ---
アルドノア?ゼロ オリジナル?サウンドトラック(文件夹
                       --- 
04 MKAlieZ.flac
                       ---(其他音频文件

下面来自己生成播放列表:
  在网上找了些python读取音乐文件属性的资料,发现似乎都使用了名为 eyed3 的模块,然而它貌似不能用在python2下,我装的python3,不想折腾双版本共存。所以做个简答的,只读取音频的文件名,并保存到m3u文件中。
  上代码:

点击(此处)折叠或打开

  1. ###
  2. # setup_m3u.py
  3. ###
  4. # coding=UTF-8-BOM
  5. #不知道这个coding有没有用...

  6. import os, sys

  7. end_str = ['.lrc',
  8.          '.jpg',
  9.          '.jpeg',
  10.          '.png']

  11. def check_str(str):
  12.     for forbid_str in end_str:
  13.         if str.endswith(forbid_str):
  14.             return 0
  15.     
  16.     return 1

  17.     
  18. if __name__ == '__main__':
  19.     print('Aloha!')
  20.     #statinfo = os.stat('./Aldnoah.Zero/01 No differences.flac')
  21.     #print(statinfo)

  22.     music_path = input('输入如包含问价的路径:')
  23.     
  24.     with open('./%s.m3u' % music_path, 'w', encoding='utf_8_sig') as m3u_file:
  25.         m3u_file.write('#EXTM3U\r')
  26.         # list all files
  27.         for file_name in os.listdir(music_path):
  28.             if check_str(file_name):
  29.                 print(music_path + '\\' + file_name + '\r')
  30.                 m3u_file.write(music_path + '\\' + file_name + '\r')


  使用方法是,把它与音频文件夹放到同级目录下,通过cmd运行,输入音频文件夹的名称。
最后,便可得到一个叫playlist.m3u的播放列表,其中有音频文件夹内所有文件的文件名。

--------------------------------------------------------------------------------------

更新代码20180325
   实现功能:通过os.walk()遍历所输入文件夹下所有文件(包括子目录下的)
        P.S. 代码参看了的内容

点击(此处)折叠或点击(此处)折叠或打开

  1. # coding=UTF-8-BOM
  2. """
  3.  可以以读取输入文件夹下的子文件内的音频
  4. """
  5. import os, sys

  6. end_str = ['.lrc',
  7.          '.jpg',
  8.          '.jpeg',
  9.          '.png']

  10. # 检测文件类型
  11. def check_str(str):
  12.     for forbid_str in end_str:
  13.         if str.endswith(forbid_str):
  14.             return 0
  15.     
  16.     return 1
  17.     
  18. ############
  19. # main
  20. ############    
  21. if __name__ == '__main__':
  22.     print('Aloha!')

  23.     music_dir = input('输入文件夹名:')
  24.     #music_dir = os.path.join('./', music_dir)
  25.     if os.path.isdir(music_dir):
  26.         print('get root dir path: ' + './' + music_dir)
  27.     else:
  28.         print('not a dir: ' + music_dir)
  29.         print('quit!!!')
  30.         exit(0)
  31.     
  32.     with open('./%s.m3u' % music_dir, 'w', encoding='utf_8_sig') as m3u_file:
  33.         m3u_file.write('#EXTM3U\r')
  34.         for (root, dirs, files) in os.walk(music_dir):
  35.             for filename in files:
  36.                 file = os.path.join(root, filename)
  37.                 if check_str(file):
  38.                     print(file)
  39.                     m3u_file.write(file + '\r')
  40.             #for dir in dirs:
  41.             #    print(os.path.join(root, dir))




阅读(2810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~