Format pliku: autor;tytul;strony
from optparse import OptionParser
import csv
import sys
names = {"author": 0, "title": 1, "pages": 2}
def main():
parser = OptionParser()
parser.add_option("-f", "--file", type="string", dest="file")
parser.add_option("-d", "--delete", type="string", dest="delete")
parser.add_option("-a", "--add", type="string", dest="add")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False)
parser.add_option("-p", "--print", action="store_true", dest="display", default=False)
(options, args) = parser.parse_args()
if not options.file:
if options.verbose:
print "No file specified"
sys.exit(1)
try:
if options.display:
fd = open(options.file, "r")
if options.verbose: print "File \"" + options.file + "\" opened"
reader = csv.reader(fd, delimiter=";", quoting=csv.QUOTE_NONE)
for num, entry in enumerate(reader):
print "%02d: " % (num+1) + ", ".join(entry)
elif options.delete:
print options.delete.split("=")
field, value = options.delete.split("=")
field = names[field]
fd = open(options.file, "r+")
if options.verbose: print "File \"" + options.file + "\" opened"
reader = csv.reader(fd, delimiter=";", quoting=csv.QUOTE_NONE)
writer = csv.writer(fd, delimiter=";", quoting=csv.QUOTE_NONE)
db = []
for entry in reader:
if entry[field] != value:
db.append(entry)
elif options.verbose:
print "Deleted: " + str(entry)
fd.truncate(0)
fd.seek(0)
writer.writerows(db)
elif options.add:
fd = open(options.file, "a")
if options.verbose: print "File \"" + options.file + "\" opened"
writer = csv.writer(fd, delimiter=";", quoting=csv.QUOTE_NONE)
writer.writerows([options.add.split(";")])
except:
if options.verbose:
print "An exception occured"
sys.exit(1)
if __name__ == "__main__":
main()