Ole Hammersland

Innhold:

Parsing av e-poster 📼

Det er ikke alltid mulig Ä arbeide pÄ en sÄ effektiv mÄte som mulig. Ofte mÄ man samarbeide med organisasjoner med en egen arbeidsflyt og kultur som ikke nÞdvendigvis er forenlig med hurtig arbeid.

To av verstingene de fleste oversettere blir tvunget til Ä bale med, er e-post og Excel-regneark. Det er ikke sÄ rart. For flere kunder som ikke nÞdvendigvis er sÄ teknisk kompetente, fremstÄr Excel som grei mÄte Ä organisere tekst pÄ. PÄ samme mÄte er e-post en rask og umiddelbar mÄte Ä sende ut en fil nÄr det ikke er noen etablert teknisk infrastruktur pÄ plass ennÄ. Men det er ikke noen solid mÄte Ä arbeide pÄ. Det er mange ulemper ved Ä distribuere filer pÄ e-post:

Det fÞrste punktet gjelder oversikt: til tross for at jeg har jobbet mye med e-post, fÞler jeg fortsatt ikke at jeg helt har knekket koden for hvordan man skal sortere e-poster sÄ effektivt som mulig. Spesielt nÄr man ogsÄ skal sortere flere kunder, flere kontaktpersoner og flere filer. Det har hendt meg at jeg har oversatt feil fil fordi jeg pÄ samme tid fikk to filer tilsendt med tilnÊrmet samme navn.

Det at det tar tid Ä sortere e-post, lagre vedlegg og vedlikeholde mappestrukturer, er ogsÄ ganske opplagt.

Balingen med e-post koster ogsĂ„ mental kapasitet. Man er nĂždt til Ă„ konsentrere seg, holde tunga rett i munnen og bruke tid pĂ„ Ă„ sortere og finne frem til riktig filer. Det er dessuten et stressmoment som henter meg ut av flytsonen jeg helst vil vĂŠre i nĂ„r jeg oversetter. Dessuten er det vel nok rapporter nĂ„ om at for mange e-poster ikke er bra for mental helse. Likevel…

Noen kunder elsker e-post

Det er bare Ă„ feise fakta. Som en stakkars frilanser er jeg jo der for Ă„ oppfylle kundens behov. Da er det flaks at man kan tenne lys i stedet for Ă„ forbanne mĂžrket – ved Ă„ lĂŠre seg programmering.

Her vil jeg vise frem to Python-skript jeg har for Ä forenkle arbeidet med en kunde. Det er en stor kunde med et stort markedsfÞringsapparat: nyhetsbrev, bannere, TV-reklamer, you name it. De sender meg ca. 15 e-poster daglig. Hver av disse e-postene inneholder et sted mellom 4 og 50 bilder (jpg eller gif). Bildene inneholder et fÞrste utkast av det grafiske innholdet pÄ opptil 6 forskjellige sprÄk. Min jobb er Ä se pÄ vedleggene med de norske layoutene og lese den norske teksten.

Det Ă„ lese gjennom bildene for Ă„ lete etter feil tar, ikke sĂ„ lang tid. Men det Ă„ lese gjennom listen over vedlegg for Ă„ finne de som er relevante for meg, tar litt tid. Heldigvis kan det automatiseres med Python 🐍.

Parsing med mailparser

Ved hjelp av mailparser-biblioteket til Python har jeg derfor raskt laget et skript som:

  1. Leter gjennom alle e-poster i samme mappe.
  2. Sorterer alle vedlegg etter avsender og e-post.
  3. Sletter alle som ikke er markert med NO for norsk.

Slik ser det ut:

import os, mailparser, re

# Loops over emails in current directory
for raw_mail in os.listdir():

    # Unpack all files except the python files.
    # It is assumed that the current directory only contains emails
    if not raw_mail.endswith(".py") and os.path.isfile(raw_mail):

        # Extract sender and subject from email
        epost_obj = mailparser.parse_from_file(raw_mail)
        sender = epost_obj.from_[0][1]
        subject = epost_obj.subject
        new_subject = re.sub(r"\W", "", subject)

        # Create a folder structure based on sender and subject
        image_path = os.path.join(sender, new_subject)
        os.makedirs(image_path, exist_ok=True)

        # Write all attachments to the corresponding folder
        epost_obj.write_attachments(image_path)

        # Delete all files that don't contain NO in title
        for attach in os.listdir(image_path):
            if "_no." in attach or "NO" in attach:
                continue
            else:
                os.remove(os.path.join(image_path,attach))
    

Ikke et veldig elegant og effektivt skript, men det er en fin quick fix som finner frem alle de bildene jeg trenger fra 15 eposter og 100 vedlegg i lÞpet av fÄ sekunder.

E-poster fra Google Drive

Den nevnte kunden sender ogsĂ„ en god del e-poster fra Google Drive. I prinsippet fungerer det pĂ„ samme mĂ„te, men disse epostene inneholder opptil 80–90 lenker i stedet for vedlegg. Av disse skal jeg klikke pĂ„ de som inneholder norsk tekst (ca. 10 %).

Quick-fix-lĂžsningen pĂ„ det ble Ă„ lagre epostene som HTML-filer og skrive et raskt skript som bruker Python-biblioteket BeautifulSoup til Ă„ parse HTML. Skriptet henter ut alle lenkene og Ă„pner dem i nettleseren dersom de slutter pĂ„ “_no.gif” eller “_no.jpg”.

import bs4, sys, webbrowser

# Enter name of HTML email as CL argument
if len(sys.argv) != 2:
	print("Usage: python get_no_links.py <name of file>")
	sys.exit()

filename = sys.argv[1]

with open(filename) as f:
	soup = bs4.BeautifulSoup(f, "lxml")

# Find all anchor tags in HTML
lenker = soup.find_all("a")

# Loop over all anchor tags
for lenk in lenker:
    try:
		proofname = lenk.span.text
	except:
		continue

    # Open all links which ends with "no.gif" or "no.jpg" in web browser
	if proofname.endswith("no.gif") or proofname.endswith("no.jpg"):
		print("Opened " + proofname)
		webbrowser.open(lenk.get("href"))

Tilbake til bloggoversikten

Tagger:

#automatisering #bash #effektivisering #python