from sys import argv from pyPdf import PdfFileWriter, PdfFileReader songs = [] f = open(argv[1], "r") for i in f: i = i.strip() a = i.split(" ") name = " ".join(a[0:-2]) book = a[-2] try: page = int(a[-1]) except: continue songs.append({ 'name': name, 'page': page, 'book': book }) bookmap = { 'Colorado': { 'file': 'COLORADO BOOK.PDF', 'pages': 292, 'offset': 3 }, 'JazzLTD': { 'file': 'JAZZ LTD BOOK.PDF', 'pages': 402, 'offset': 7 }, 'RealBk3': { 'file': 'REAL BOOK III.PDF', 'pages': 366, 'offset': 5 }, 'JazzFake': { 'file': 'JAZZ FAKE BOOK.PDF', 'pages': 448, 'offset': -1 }, 'EvansBk': { 'file': 'BILL EVANS FAKE BOOK.PDF', 'pages': 106, 'offset': 3 }, 'Library': { 'file': 'LIBRARY.PDF', 'pages': 217, 'offset': 4 }, 'RealBk1': { 'file': 'REAL BOOK I.PDF', 'pages': 512, 'offset': 13 }, 'NewReal2': { 'file': 'NEW REAL BOOK II.PDF', 'pages': 497, 'offset': 12 }, 'NewReal3': { 'file': 'NEW REAL BOOK III.PDF', 'pages': 448, 'offset': 10 }, 'RealBk2': { 'file': 'REAL BOOK II.PDF', 'pages': 422, 'offset': 7 }, 'NewReal1': { 'file': 'NEW REAL BOOK I.PDF', 'pages': 453, 'offset': 15 } } def nice_name(name): if name[0] == "'": name = name[1:] return name.replace("/", "-") prefix = "/mnt/multimedia/Books/Real Book/" destination = "/home/zx2c4/Real Split/" for book in bookmap.keys(): input = PdfFileReader(file(prefix + bookmap[book]["file"], "rb")) for song in songs: if song["book"] != book: continue print song page = song["page"] + bookmap[song["book"]]["offset"] - 1 span = 999999 for song2 in songs: if song["book"] != song2["book"] or song == song2: continue page2 = song2["page"] + bookmap[song2["book"]]["offset"] - 1 diff = page2 - page if diff <= 0: continue if diff < span: span = diff if page + span > bookmap[book]["pages"]: span = bookmap[book]["pages"] - page output = PdfFileWriter() for i in xrange(0, span): output.addPage(input.getPage(page + i)) output_stream = file("%s%s [%s].pdf" % (destination, nice_name(song["name"]), song["book"]), "wb") output.write(output_stream) output_stream.close()