2007-12-03, 22:16
#1
Har nu skrivit mitt första egna program, dock så kommer funktionerna från www.diveintopython.org
Man lägger programmet i en valfri mapp på datorn, detta kan då läsa igenom alla id3-taggar i de mp3-filer som finns där och skriva ut <title> - <artist> till en fil som kommer att heta tracklist.txt. Ett exempel på vad tracklist.txt kan innehålla:
Det går jättefint att göra så här tills programmet kommer på en fil där antingen <title> eller <artist> saknas i id3. Då skrivs ingenting alls i tracklist.txt och den förblir tom. Jag vill att om <title> eller <artist> saknas så ska mp3filens namn istället skrivas ut. Har provat allt möjligt men inte lyckas lösa detta. Kan någon hjälpa mig?
Man lägger programmet i en valfri mapp på datorn, detta kan då läsa igenom alla id3-taggar i de mp3-filer som finns där och skriva ut <title> - <artist> till en fil som kommer att heta tracklist.txt. Ett exempel på vad tracklist.txt kan innehålla:
Kod:
# Tracklist.txt # Generated by ID3TagWriter_v1.0 by eriikh Berätta det för lina - Lillasyster Kräkas - Lillasyster Svin - Lillasyster Hårdrock - Lillasyster Nu har jag fått nog - Lillasyster Barn utan ben - Lillasyster Kometen - Lillasyster Spänn hjälmen - Lillasyster Stukaplan - Lillasyster Varfördärför - Lillasyster
Det går jättefint att göra så här tills programmet kommer på en fil där antingen <title> eller <artist> saknas i id3. Då skrivs ingenting alls i tracklist.txt och den förblir tom. Jag vill att om <title> eller <artist> saknas så ska mp3filens namn istället skrivas ut. Har provat allt möjligt men inte lyckas lösa detta. Kan någon hjälpa mig?
Kod:
# ID3Tagwriter_1.0 by eriikh # This text should not be removed # Everything before "Main:" comes from www.diveintopython.org and are written by Mark Pilgrim 2001. import os import sys from UserDict import UserDict def stripnulls(data): "strip whitespace and nulls" return data.replace("\00", " ").strip() class FileInfo(UserDict): "store file metadata" def __init__(self, filename=None): UserDict.__init__(self) self["name"] = filename class MP3FileInfo(FileInfo): "store ID3v1.0 MP3 tags" tagDataMap = {"title" : ( 3, 33, stripnulls), "artist" : ( 33, 63, stripnulls)} def __parse(self, filename): "parse ID3v1.0 tags from MP3 file" self.clear() try: fsock = open(filename, "rb", 0) try: fsock.seek(-128, 2) tagdata = fsock.read(128) finally: fsock.close() if tagdata[:3] == 'TAG': for tag, (start, end, parseFunc) in self.tagDataMap.items(): self[tag] = parseFunc(tagdata[start:end]) except IOError: pass def __setitem__(self, key, item): if key == "name" and item: self.__parse(item) FileInfo.__setitem__(self, key, item) def listDirectory(directory, fileExtList): "get list of file info objects for files of particular extensions" fileList = [os.path.normcase(f) for f in os.listdir(directory)] fileList = [os.path.join(directory, f) for f in fileList \ if os.path.splitext(f)[1] in fileExtList] def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]): "get file info class from filename extension" subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:] return hasattr(module, subclass) and getattr(module, subclass) or FileInfo return [getFileInfoClass(f)(f) for f in fileList] # Main: if __name__ == "__main__": # Forsakra att programmet anvands som fristaende trackfile = open("tracklist.txt", "w") trackfile.write("# Tracklist.txt") trackfile.write("\n") trackfile.write("# Generated by ID3TagWriter_v1.0 by eriikh") trackfile.write("\n") trackfile.write("\n") for info in listDirectory("", [".mp3"]): # "" = leta i egen mapp trackfile.write(info["title"]) # Skriv ut title-tag trackfile.write(" - ") trackfile.write(info["artist"]) # Skriv ut artist-tag trackfile.write("\n") # Retur trackfile.close() # Stang fil print file("tracklist.txt").read() # Skriv ut fil i kommandofonstret