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