Python output opslaan in .txt

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Dean88
  • Registratie: Januari 2010
  • Laatst online: 10-06 21:48
Ik heb een script die alle email adressen uit een .txt bestand filtert. Vervolgens is het de bedoeling dat hij deze wegschrijft in list.txt.

Vreemd genoeg slaat hij maar 1 email adres op, tijdens het proces open ik het list.txt en zie ik het email adres wel veranderen maar hij slaat er maar 1 op in plaats van allemaal.

Als ik "print email" doe i.p.v opslaan naar .txt komen alle email adressen er wel uit.

Script:


import sys
from optparse import OptionParser
import os.path
import re

regex = re.compile(("([a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`"
"{|}~-]+)*(@|\sat\s)(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(\.|"
"\sdot\s))+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"))

def file_to_str(filename):
"""Returns the contents of filename as a string."""
with open(filename) as f:
return f.read().lower() # Case is lowered to prevent regex mismatches.

def get_emails(s):
"""Returns an iterator of matched emails found in string s."""
# Removing lines that start with '//' because the regular expression
# mistakenly matches patterns like 'http://foo@bar.com' as '//foo@bar.com'.
return (email[0] for email in re.findall(regex, s) if not email[0].startswith('//'))

if __name__ == '__main__':
parser = OptionParser(usage="Usage: python %prog [FILE]...")
# No options added yet. Add them here if you ever need them.
options, args = parser.parse_args()

if not args:
parser.print_usage()
exit(1)

for arg in args:
if os.path.isfile(arg):
for email in get_emails(file_to_str(arg)):
#print email
notepad = open("list.txt","wb")
notepad.write(email)
notepad.close()
else:
print '"{}" is not a file.'.format(arg)
parser.print_usage()

Acties:
  • +1 Henk 'm!

  • efan
  • Registratie: Januari 2001
  • Niet online
je gebruikt notepad = open("list.txt","wb"), die wb moet een a zijn neem ik aan :) ?

Acties:
  • 0 Henk 'm!

  • Dean88
  • Registratie: Januari 2010
  • Laatst online: 10-06 21:48
ido schreef op vrijdag 2 december 2016 @ 14:02:
je gebruikt notepad = open("list.txt","wb"), die wb moet een a zijn neem ik aan :) ?
Ah super! _/-\o_ Dat werkt alleen komen alle email adressen nu aan elkaar vast in het .txt en ik wil ze graag onder elkaar.

Als ik notepad.write(email) verander in notepad.write("email\n") krijg ik het woord email honderd keer onder elkaar in plaats van de email adressen :F

Acties:
  • +1 Henk 'm!

  • dataindataout
  • Registratie: Oktober 2010
  • Laatst online: 06-02 09:38
Ik ben geen python programmer maar probeer eens notepad.write(email+"\n")

Acties:
  • 0 Henk 'm!

  • Fr33z
  • Registratie: December 2003
  • Laatst online: 22:09
inderdaad. Gebruik "a" voor append ipv "w" voor write en zet een newline (meestal \n) in je berichten

Acties:
  • 0 Henk 'm!

  • Dean88
  • Registratie: Januari 2010
  • Laatst online: 10-06 21:48
dataindataout schreef op vrijdag 2 december 2016 @ 14:33:
Ik ben geen python programmer maar probeer eens notepad.write(email+"\n")
Jah dat was de oplossing! Bedankt.
Het enige waar ik nu nog tegen aanloop zijn duplicaten. Kan ik deze filteren alvorens hij ze wegschrijft naar het .txt?

[ Voor 21% gewijzigd door Dean88 op 02-12-2016 14:48 ]


Acties:
  • +1 Henk 'm!

  • KabouterSuper
  • Registratie: September 2005
  • Niet online
Het enige waar ik nu nog tegen aanloop zijn duplicaten. Kan ik deze filteren alvorens hij ze wegschrijft naar het .txt?
[/quote]

Tuurlijk, in je loop even een array bijhouden met emailadressen die je al gehad hebt.

When life gives you lemons, start a battery factory


Acties:
  • +1 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 09-10 13:33
Als je de e-mail adressen in een set() opslaat in plaats van een list() worden ze sowieso ontdubbeld. Wellicht is dat een efficiente oplossing?

Gaat dan met name om deze functie

Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
def get_emails(s):
  """
  Returns a set of matched emails found in string s
  """
  emails = set()

  # Removing lines that start with '//' because the regular expression
  # Mistakenly matches patterns like 'http://foo@bar.com' as '//foo@bar.com'.
  for email in re.findall(regex, s):
    if not email[0].startswith('//'):
      emails.add(email[0])

  return emails

[ Voor 61% gewijzigd door Morrar op 02-12-2016 14:57 ]


Acties:
  • +1 Henk 'm!

Verwijderd

Leuk topic voor de vrijdagmiddag! Zet de volgende keer wel je code tussen tags, dat leest wat makkelijker.
code=python /code (zelf even de [ ] toevoegen ;))


Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
from optparse import OptionParser
import os.path
import re

regex = re.compile(("([a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`"
"{|}~-]+)*(@|\sat\s)(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(\.|"
"\sdot\s))+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)"))

def file_to_str(filename):
"""Returns the contents of filename as a string."""
with open(filename) as f:
return f.read().lower() # Case is lowered to prevent regex mismatches.
.......
Pagina: 1