python

4 posts

Install AWS CLI on Ubuntu

To install AWS CLI on Ubuntu, you need to use Python 2.7. If you use Python 2.6, there is a conflict error with simplejson library.

You may need to uninstall Python 2.6 first using sudo apt-get remove python. Then install Python 2.7.

sudo add-apt-repository ppa:fkrull/deadsnakes  
sudo apt-get update  
sudo apt-get install python2.7  

Then install pip using sudo apt-get install python pip, then install AWS CLI using sudo pip install awscli.

Python 3.0已经发布

这其实是一则旧闻了,Python 3.0,也就是Python 3000或Py3K,已经正式发布了。需要注意的是3.0与之前的版本是不兼容的,考虑升级的朋友需要注意了。不过有一个工具可以将Python 2.x的代码转换成3.0的,看这里

下载地址见这里

Python 3.0版本的新特性见这里

喜欢Python的同学们,可以开始尝试啦。

使用MP3 ID3 Tag来自动重命名MP3文件

从网上下载的MP3文件,其文件名通常是不规则的,比如一些数字的组合。这样的话,单从文件名是无法知道这首歌的内容的。这就造成了查找歌曲的不方便。而MP3文件的元数据,比如歌曲名称,歌手名称,专辑名称等,都存放在其ID3标签中。因此可以通过提取MP3文件的ID3标签,用其中的歌曲名称来作为新的文件名。

我使用ID3 Tagging in Python来读取MP3文件的ID3标签。做了一点小小的修改,原来的实现在读取MP3文件之后没有关闭该文件,导致无法重命名,我增加了关闭文件的一行代码。

具体的重命名的代码如下,具体的可下载的代码见附件。

import os  
from ID3 import *

path = 'C:\\TDDownload\Musictest'  
ACCEPTED_FILE_EXTENSIONS = (".mp3")

def get_file_extension(filename) :  
  return os.path.splitext(filename)[1].strip().lower()

def is_acceptable_file(filename) :  
  if (filename) :
    return get_file_extension(filename) in ACCEPTED_FILE_EXTENSIONS
  return 0

def main() :  
  renames = {}
  for root, dirs, files in os.walk(path) :
    for filename in files :
      if is_acceptable_file(filename) :
        extension = get_file_extension(filename)
        try:
          id3info = ID3(os.path.join(root, filename))
          title = id3info.title
          if (title.strip() != '' and not renames.has_key(title)) :
            renames[title] = (os.path.join(root, filename), os.path.join(root, title + extension))
          else :
            print "Skip file %s " % os.path.join(root, filename)
        except InvalidTagError, message:
          print 'Invalid ID3 tag:', message
  for src, target in renames.values() :
    print '*' * 3, "Rename file %s to %s " % (src, target), '*' * 3
    try :
      os.rename(src, target)
    except :
      print "Error occurs when renaming file %s " % src

if __name__ == '__main__' :  
  main()

代码运行中的输出如下:

*** Rename file ../testfiles/002\10001079.mp3 to ../testfiles/002\隐形的翅膀.mp3  ***
*** Rename file ../testfiles/002\200611294126.mp3 to ../testfiles/002\眼泪成诗.mp3  ***
*** Rename file ../testfiles/002\20070610190627.mp3 to ../testfiles/002\离歌.mp3  ***

换种方式来看水木清华BBS的MyPhoto(个人Show)版

常上水木清华BBS的人自然都少不了关注MyPhoto(个人Show)PieLove版,因为上面总有帅哥美女们的照片。很多时候我们都只是看发帖者发布的照片而已,对于其他人的回帖并不是很感兴趣。显然,逐一的点开每篇帖子去看很麻烦,会产生很多不必要的点击。

我很早以前写过一个Python的脚本,用来抓取水木清华BBS上的帖子的发布者的附件,并生成一个单一的HTML页面,使得浏览起来更加方便。写得比较简单,必须在代码里面手工写入版面的地址,而且一次只能抓取一个页面,不支持翻页。

如果机器上装了Python,只需要复制下面的代码并保存为Python文件后运行,就会在当前目录下生成一个HTML页面,打开此页面,就可以看到所有的图片附件了。

# -*- coding: gb2312 -*-
import urllib2, re, os, time

pie_url = 'http://www.newsmth.org/bbsdoc.php?board=MyPhoto&ftype=6'  
c = urllib2.urlopen(pie_url)  
html = c.read()  
p = re.compile("c\.o\((.*?),(.*?),'(.*?)','(.*?)',.*?,'(.*?)',.*?\);")  
topics =  re.findall(p, html)

def get_attach_url(att, attach) :  
  name = attach[0]
  ext = None
  try :
    ext = os.path.splitext(name)[1].strip()[1:]
  except :
    pass

  url = 'http://www.newsmth.org/att.php?'
  if att[4] == 1 :
    url += 'n'
  elif attach[1] > 51200 :
    url += 'p'
  else :
    url += 's'
  url += "." + str(att[0]) + "." + str(att[1])

  if att[2] == 1 :
    url += "." + str(att[2]) + "." + str(att[3])
  url += "." + str(attach[2])

  if ext :
    url += '.' + ext
  return url  

page_head = """  
    <html>
    <head>
      <title>SMTH Pie</title>
    </head>
    <body>
"""

page_tail = """  
    </body>
  </html>  
"""

gen_total_html = page_head

for topic in topics :  
  mark = topic[3]
  if mark.find('@') != -1 :
    url = "http://www.newsmth.org/bbscon.php?bid=874&id=%s" % topic[0]
    html2 = ''
    try :
      c = urllib2.urlopen(url)
      html2 = c.read()
    except :
      continue

    attp = re.compile("attWriter\((.*?),(.*?),(.*?),(.*?),(.*?)\);")
    atts = re.findall(attp, html2)
    att = None
    attach = None

    try :
      att = atts[0]
    except :
      pass

    attachp = re.compile("attach\('(.*?)',(.*?),(.*?)\)")
    attachs = re.findall(attachp, html2)
    gen_total_html += ("<p><span>%s</span><br />" % topic[4])
    for attach in attachs :
      if att and attach :
        attl = []
        attachl = []
        for item in att :
          attl.append(int(item.strip()))
        attachl.append(attach[0])
        attachl.append(int(attach[1].strip()))
        attachl.append(int(attach[2].strip()))
        img_url = get_attach_url(attl, attachl)
        gen_html = "<img src='%s' />" % img_url
        gen_total_html += gen_html
    gen_total_html += '</p>'

gen_total_html += page_tail

file_name = "smth_pie_%s.html" % time.time()  
file = open(file_name, 'w')  
file.write(gen_total_html)  
file.close()