Instantly share code, notes, and snippets.

Embed
What would you like to do?
Skript v Pythonu na konverzi řádkového MARC (TAG) do formátu čitelného MarcEditem
#!/usr/bin/python27
'''
Script pro prevod souboru pro MarcEdit
'''
import string
import sys
import os
def usage():
'''
Vypise pouziti programu.
'''
print("""Usage:
%s vstupnisoubor.txt vystupnisoubor.txt
jako soubor lze pouzit "-" pro stdin, nebo stdout
""" % os.path.basename(sys.argv[0]))
exit(1) # ukonceni s chybou
def main():
'''
Hlavni funkce
'''
if len(sys.argv) < 2: # kdyz nejsou zadany parametry, vypise se usage
usage()
'''
Otevreni vstupniho souboru
'''
if sys.argv[1]=='' or sys.argv[1]=='-': # pokud neni zadano, nebo je zadano minus, pouzije se stdin
f_in = sys.stdin
else:
if os.path.isfile(sys.argv[1]):
f_in = open(sys.argv[1],'r') # otevreni vstupniho souboru, nazev je zadan parametrem
else:
sys.stderr.write("Vstupni soubor neexistuje\n") #chybova vlaska do err vystupu.
'''
Otevreni vystupniho souvoru
'''
if len(sys.argv)<3 or sys.argv[2]=='' or sys.argv[2]=='-': # pokud neni zadano, nebo je minus, pouzije se stdout
f_out = sys.stdout
else:
f_out = open(sys.argv[2],'w') # otevreni vystupniho souboru, nazev je zadan parametrem
lab_count=0
'''
Pocitadlo "lab" zaznamu kvuli odradkovani
'''
for line_in in f_in: # radek po radku
line_in=line_in.rstrip('\r\n') # odtraneni konce radku
line_out='' # prazdy odrhozi radek
if line_in=='': # preskoceni prazdnych radek
continue
if line_in[:3] == 'lab': # kdyz prvni tri znaky obsahuji "lab"
if lab_count>0: # pokud je to jiz opakovany "lab" prida se odradkovani
line_out=line_out+'\n'
else:
line_out=''
line_out=line_out+'=LDR'+' '+line_in[7:] #radek bude obsahovat =LDR a znaky od sedmeho znaku
lab_count=lab_count+1 # pocitani "lab"
elif int(line_in[:3])<=8: # zaznamy s cislem <=8
line_out='='+line_in[:3]+' '+line_in[7:] # prvni tri znaky + znaky od sedmeho znaku
else: # ostani zanamy
tag=line_in[:3] # prvni tri znaky do promene tag
if tag=='980': # pokud tag je 980
tag='993' # prirad do tag 993
line_out='='+tag+' '+string.replace(line_in[4:6],' ','\\')+line_in[7:] # zaznam bude ulozen ve formatu: prvni tri znaky, dve mezery, pak 4 az sesty znak, pripadne pokud obsahuje mezeru nahradi se lomitkem + znaky od sedmeho znaku
f_out.write(line_out+'\n') # zapsani radku do vystupniho souboru
f_in.close() # zavreni vstupniho souboru
f_out.close() # zavreni vystupniho souboru
if __name__ == "__main__": # spusteni hlavni funkce
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment