為了把原設為 irclog/$tag/$0/%Y/$0.%Y%m%d.log 格式的 irssi log 改成 irclog/$tag/$0/%Y/$0.%Y%m.log (每月一個檔;之前每天放一個檔,感覺資料太難找了),寫了一個小程式把舊的 log 接合起來。
寫的時間稍微有點久,程式看起來也有點累贅;有沒有辦法在二三十行內解決呢?
以下是程式 listing:
#!/usr/bin/env python # -*- coding: UTF-8 -*- """ $Id: irclogday2month.py 5 2006-03-21 13:08:39Z yungyuc $ """ try: __revision__ = int( "$Revesion$".split()[1] ) except: __revision__ = 0 import sys from os import makedirs from os.path import exists, join, basename from glob import glob def main(): sourcedir = "source" targetdir = "target" networks = [ basename(p) for p in glob(join( sourcedir, "*" )) ] for network in networks: channels = [ basename(p) for p in glob(join( sourcedir, network, "*" )) ] for channel in channels: years = [ basename(p) for p in glob(join( sourcedir, network, channel, "*" )) ] for year in years: # Actually do text-joining. # Get day strings. days = [ basename(p) for p in glob(join( sourcedir, network, channel, year, "*.log" )) ] # Create dictionary keyed by month name (string) containing # day listing months = {} for day in days: key = day[-8:-6] month = months.get( key, [] ) month.append( day ) months[key] = month # Write source text file jointly to target text file. for key in months: month = months[key] # Sort the day list. month.sort() # Data initially empty. data = "" # Then joining all files in day list. for day in month: f = open(join( sourcedir, network, channel, year, day )) data += f.read() f.close() # Preparing target containing directory. tdir = join( targetdir, network, channel, year ) if not exists( tdir ): makedirs( tdir ) # Write to target text file. tfile = "%s.%s%s.log" % (channel, year, key) f = open(join( tdir, tfile ), 'w' ) f.write( data ) f.close() sys.stdout.write( "%s is written.\n" % join( tdir, tfile ) ) if __name__ == '__main__': main() # vim:set ai et nu sw=4 ts=4 tw=80:
Posted by yungyuc
at 21:29,
0 comment,
0 trackback.
Navigate
- Previous: Private saving ryan @2006/03/19
- Next: gVIM 小技巧,別讓視窗那麼小 @2006/03/26
Add a trackback
Please send trackback to: http://blog.seety.org/everydaywork/2006/3/21/488/trackback/.
Add a comment