[python]lees tekst tussen twee delimiters en gebruik als var

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
3.Geef eerst globaal aan wat het probleem is.

Het programma werkt maar 'print' niet de tekst tussen de delimiter ";' op een regel in csv file.
bv.
1;dit is een tekst; dit is nog een tekst; deze tekst wil ik lezen; deze niet; etc;;;;
ik wil de derde strings lezen en gebruik row[2]
Maar ik krijg niet de tekst?!: "deze tekst wil ik lezen"
mijn output is nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
3;Naar muziek luisteren (cassette, cd, mp3 etc).;1;;2;;3;4;5;1;2;3;;4;;5

3;Naar
3
;
;
klaar
N
a
a
r
 
m
u
z
i
e
k



4.Geef vervolgens aan waar je denkt dat het aan ligt.
Ik denk dat het te maken met de row variable. Ik weet niet precies wat row[0] wil zeggen? Volgens mij moet hij dan de eerste kolom van een regel laten zien uit csv?

5.Geef daarna aan wat je al geprobeerd hebt om zelf tot een oplossing te komen.
Een duidelijke omschrijving geven van dingen die je al geprobeerd hebt voorkomt ook dat mensen tips geven die voor jou oude koek zijn.
Ik heb de code op veel manieren uitgeprobeerd en geen goed resultaat wat ik dus wil?!
experimenteer veel en heb gegoogeld. En op YouTube videos bekeken.

6.Geef aan waarom je denkt dat jouw oplossing niet werkt of geef aan waarom je denkt dat dat niet werkt.
Je eigen oplossing heeft niet gewerkt. Als je begrijpt waarom niet, vertel dit dan. Als je dat niet begrijpt, kun je dat als "subvraag" in je topicstart opnemen.

Mijn oplossing werkt niet omdat ik noob ben, please help me begrijpen hoe ik dus woorden en strings etc uit een csv kan lezen?

7.Geef altijd aan wat voor eventuele foutmeldingen of waarschuwingen je krijgt.
programma gaat goed. geen fouten

uitkomst is niet bevredigend

8.Wanneer je alles duidelijk hebt uitgelegd, vat je je probleem samen en stel je de uiteindelijke vraag.
kortom alles gaat goed behalve bij invoeren van eigen waardes in laatste programma:
met:

Samengevat:
Ik heb dus een regel met 4 kolomen of x
1;kolom1;kolom2;kolom3;kolom4;kolom-x
Ik wil telkens de tweede kolom lezen van een rij: volgens mij doe ik dat met "for row in file: print row[1]"
Maar ik krijg wat anders op mijn output.


9.Plaats je vraag in één topic in één forum.
Zogenaamd "crossposten" is niet gewenst. Als je er niet zeker van bent of je op de goede plaats je topic opent, neem dan contact op met een moderator.
Afbeeldingslocatie: http://i.imgur.com/YTA9Qf2.png

Verstand van 'Alles' van 'Niets'


Acties:
  • +1 Henk 'm!

  • justahuman
  • Registratie: Maart 2011
  • Laatst online: 23-08 11:56
Python heeft gewoon een speciale csv libary specifieke rede om die niet te gebruiken?

Acties:
  • +1 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 18:41
Ik raad ook aan om CSV reader / writer of DictReader / DictWriter te pakken.

Maar om je probleem te verduidelijken : for row in file betekent dat row een ingelezen regel is. Die regel moet je vervolgens opdelen in kolommen / variabelen met split(). Bijvoorbeeld:

code:
1
2
3
4
file = open('data. csv', 'r')
for line in file:
    cols = line. split(';')
    print(cols[2])

[ Voor 5% gewijzigd door Morrar op 12-12-2015 22:24 ]


Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
code:
1
2
3
4
for row in saveFile:
    cols = row. split(';')
    if (cols[1])== "Buitenshuis eten.":
          print(cols[1])

Precies wat ik wil! Dankje @Morrar

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online

Bartjuh

Hej

Met bovenstaande. Je hebt csv libs, net als xml of json.

Niet splitten, maar gewoon een dialect gebruiken. In dit geval Excel.

Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
Bartjuh schreef op zaterdag 12 december 2015 @ 22:58:
Met bovenstaande. Je hebt csv libs, net als xml of json.

Niet splitten, maar gewoon een dialect gebruiken. In dit geval Excel.
Heb je specifieke helppagina voor noobs die je kan aanraden? ik ga even googlen tussentijds...:)
dialect = csv.excel_tab bedoelde je dit?

[ Voor 5% gewijzigd door digidokter.net op 12-12-2015 23:06 ]

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online

Bartjuh

Hej

paranoia68 schreef op zaterdag 12 december 2015 @ 23:01:
[...]

Heb je specifieke helppagina voor noobs die je kan aanraden? ik ga even googlen tussentijds...:)
https://docs.python.org/2/library/csv.html

Moet zeggen dat bovenstaande site vrij uitgebreid is terwijl je meestal alleen de basis nodig hebt. Google is your friend :)

Deze bijv. https://pymotw.com/2/csv/

Edit; nee, dit
csv.reader(csvfile, dialect='excel', **fmtparams)
Kan je direct als argument meegeven. Excel dialect betekend ; als delimiter en linebreaks als rows. En row in iterator is gewoon een list van de deliminated values uit de csv.

[ Voor 22% gewijzigd door Bartjuh op 12-12-2015 23:19 ]


Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
Kan je direct als argument meegeven. Excel dialect betekend ; als delimiter en linebreaks als rows. En row in iterator is gewoon een list van de deliminated values uit de csv.
Wooooo, ik ben pas 1 week met python bezig...
Kan je dat in lekentaal zeggen? :)
Ik denk dat ik het begrijp: Een row is een lijst van woorden gescheiden door ';' en een woord is een lijst van chars? Dan is een file een lijst van rows, nietwaar?!

[ Voor 23% gewijzigd door digidokter.net op 12-12-2015 23:44 ]

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online

Bartjuh

Hej

paranoia68 schreef op zaterdag 12 december 2015 @ 23:22:
[...]

Wooooo, ik ben pas 1 week met python bezig...
Kan je dat in lekentaal zeggen? :)
code:
1
2
3
4
5
6
7
f = open('bestand.csv', 'rt')
try:
    reader = csv.reader(f)
    for row in reader:
        print row
finally:
    f.close()

Van site geplukt.

'for row in reader', dan is reader een iterable (of zelf een iteratpr). http://stackoverflow.com/...e-and-iteration-protocols

Je loopt door de rijen heen, waarin row een list is. Kortom row[1] is de waarde in de tweede kolom voor de huidige rij in de 'for loop'.

Wat een list is weet je wel lijkt me, dat is Python les 1 ;)

Voorbeeld is niet optimaal; Je kan ook 'with' gebruiken ipv open en try-catch.

Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
Wat een list is weet je wel lijkt me, dat is Python les 1 ;)
Dankje, ik volg les op codeacademy.com en ben bij les 14, row hebben we nog niet gehad. list wel volgens mij maar even nakijken...:)
Dank voor de links en toelichting je maakt me dag! :)

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online

Bartjuh

Hej

paranoia68 schreef op zondag 13 december 2015 @ 21:22:
[...]

Dankje, ik volg les op codeacademy.com en ben bij les 14, row hebben we nog niet gehad. list wel volgens mij maar even nakijken...:)
Dank voor de links en toelichting je maakt me dag! :)
Hoho, 'row' is niets anders dan een descriptief naampje! Had ook 'bla' genoemd kunnen worden.
code:
1
2
For <var> in <iterable>:
...

<var> kan vanalles zijn, van int, tot list, tot een object (al is alles een object in Python, zelfs een int is encapsulated), het is maar wat de iterator terugeeft bij een opvolgende _next_() call (magic method).

List is verglijkbaar met een array in andere talen in de zin dat het een verzameling 'waardes' zijn die je kan benaderen met een index ('ladekast' idee), maar ook weer heel anders. Python werkt met value by object reference. Elke index in een list verwijst naar een bepaald object, wat voor elke index weer een andere type kan zijn. Een list in python is daarom misschien beter vergelijkbaar met een telefoonboek.

Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
Een list in python is daarom misschien beter vergelijkbaar met een telefoonboek.
Ja klopt, ik ben daarmee aan het experimenteren. Een file is in principe ook een telefoonboek. Maar hoe ik een specifiek naar en nummer vindt vindt ik nog moeilijk. Ik ben dus zoekende naar functies die dat proces vergemakkelijken. Alle problemen waar ik tegen aan loop zijn opgelost in stackoverflow. Ik loop dan tegen een 'error' aan en Google het en pas oplossing toe ook al begrijp ik de helft niet. Maar langzaam kom ik in de programmeertaal. Gelukkig zijn er programmeurs op Tweakers die ons 'noobs' uit de brand helpen.
Ik volg naast codecademy.com ook veel YouTube filmpjes. maar het is verstandiger eerst de basis goed te kennen anders leer ik foute gewoontes aan en die kan je moeilijk afleren!
Ik ben het nu aan bestuderen: YouTube: Loop like a native: while, for, iterators, generators

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 23-08 07:04
Misschien is het handig om niets te implementeren/kopiëren wat je niet volledig begrijpt. Op deze manier leer je meer goed googlen dan daadwerkelijk de programmeertaal gebruiken, laat staan nadenken over het oplossen van problemen in de programmeertaal van jouw keuze.
Je hoeft echt niet altijd het wiel opnieuw uit te vinden, maar zoeken naar een oplossing en die klakkeloos kopiëren is slechter dan een keer iets maken omdat je toevallig niet wist dat het al in de programmeertaal zelf zat.

Daarnaast: er zijn duizend en een routes naar een oplossing, waarom zou die ene persoon op stackoverflow altijd het beste idee hebben? Misschien kies je altijd de "chosen answer", maar dat hoeft niet in te houden dat die persoon ook maar enigsinds gelijk heeft of zelfs maar de juiste manier van programmeren aanhoudt.

Let er gewoon vooral op dat wat je ook doet: word nooit iemand die alles maar in elkaar googled.

Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online

Bartjuh

Hej

Duizend routes naar een oplossing is niet pythonic :p ;)

import this

https://www.python.org/dev/peps/pep-0020/
The Zen of Python
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.

Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

Acties:
  • 0 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 23-08 07:04
Bartjuh schreef op zondag 13 december 2015 @ 22:18:
Duizend routes naar een oplossing is niet pythonic :p ;)

import this

https://www.python.org/dev/peps/pep-0020/


[...]
Ga je nou daadwerkelijk schermen met een text van een programmeertaal die in twee verschillende versies beschikbaar is, die beide up to date worden gehouden maar niet interchangeable zijn vanwege kleine verschillen? :+

Hoe dan ook: je snapt wat ik bedoelde en ook Python heeft niet voor alles een standaard ingebouwd, dus zijn er toch weer duizend routes naar je oplossing. Niet elk probleem is zo simpel opgelost als een CRUD-library hier, een Validation-library daar of een random library van github trekken en hopen dat het precies jouw casus oplost ;)

Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
Daarnaast: er zijn duizend en een routes naar een oplossing, waarom zou die ene persoon op stackoverflow altijd het beste idee hebben? Misschien kies je altijd de "chosen answer", maar dat hoeft niet in te houden dat die persoon ook maar enigsinds gelijk heeft of zelfs maar de juiste manier van programmeren aanhoudt.
Ik heb leren programmeren in de taal MS dos(hobby), daarna in PLC op MTS. Ik moest stoplichten programmeren etc. Op de HTS heb ik Turbo pascal geleerd en moest ik een deel van een studentenadministratie systeem doen. Vervolgens ik ik werken op een adviesbureau als tekenaar en werkte met Autocad en SunUnix systemen. Ik was al die jaren nooit verder gekomen dan de basislessen door de moeilijkheidsgraad. En deed alleen het noodzakelijke. Daarna is het programmeren een beetje doodgebloed. Nu 20 jaar later heb ik met python weer een enthousiasme die ik had met Pascal. Ik wil graag een WRAP(welnessactionrecoveryplan) schrijven op mij afgestemd. Met het huidige aanbod van google en youtube ben ik in een week heel vergekomen waar ik in pascal nooit had van kunnen dromen of MSdos?! Mede door kopie/paste van functies, delen van code en aanpasssen etc. Waarom zou ik steeds het wiel uitviinden als het al is uitgevonden?! Ik gebruik ook de standaard functies in python zoals 'len' en '.split' daar zit ook code achter. Wat jij suggereert klopt deels, maar met mijn ambitie en korte aandachtsspanningboog is google mijn God!
Ik leer nu via codeacademy.com de basics en die probeer ik eigen te maken. Maar ik ken de structuur van programmeren al van pascal en msdos. Alleen python heeft andere methodes of eigenaardigheden etc. maar als ik eenmaal de taal eigen ben kan ik hem ook vloeiend spreken en programmeren.
Ik zie het als engelse films kijken met ondertitels. Door het lezen van de ondertitels begrijp ik beter wat er in de context wordt bedoeld. Standalone vertaal ik het soms verkeerd. Ik spreek en schrijf goed engels maar google is voor mij een tool, een hulpmiddel niet het doel!

@Merethil ik begrijp je advies en accepteer die met de goede bedoelingen. En zal hem volgen, maar gebruik google als kompas als ik door de bomen het bos niet meer zie.

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
@Bartjuh, @Merethil
Met dit voorbeeld voor mijn oorspronkelijke probleem:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Read From a File
Use the with open syntax to read from files. This will automatically close files for you.

Bad:

f = open('file.txt')
a = f.read()
print a
f.close()
Good:

with open('file.txt') as f:
    for line in f:
        print line
The with statement is better because it will ensure you always close the file, even if an exception is raised inside the with block.

Begrijp ik een beetje waar jullie op doelen: het schrijven van schone, kort en krachtige, leesbare code die alle mogelijkheden in python benut.
Ik zal dan ook nu beter opletten hoe ik de code opbouw en waarom hij zo is. En op de 'goede'manier leren programmeren. Jullie discussie heeft me 'wakker' geschut en gewaarschuwd als ik teveel Google oplossingen toepas. _/-\o_

Verstand van 'Alles' van 'Niets'


Acties:
  • 0 Henk 'm!

  • Bartjuh
  • Registratie: Oktober 2001
  • Niet online

Bartjuh

Hej

Merethil schreef op zondag 13 december 2015 @ 22:34:
[...]
Ga je nou daadwerkelijk schermen met een text van een programmeertaal die in twee verschillende versies beschikbaar is, die beide up to date worden gehouden maar niet interchangeable zijn vanwege kleine verschillen? :+

Hoe dan ook: je snapt wat ik bedoelde en ook Python heeft niet voor alles een standaard ingebouwd, dus zijn er toch weer duizend routes naar je oplossing. Niet elk probleem is zo simpel opgelost als een CRUD-library hier, een Validation-library daar of een random library van github trekken en hopen dat het precies jouw casus oplost ;)
Was ook een grapje ;) Snap ook wat je bedoelde, je hebt daarin gelijk; zet iets in elkaar dat je zelf begrijpt, ook al heb je twijfels of het 'de beste' manier is.

Ik ben er zelf echter met ervaring ook achter gekomen dat er bijna altijd een 'most pythonic way' is in python.

@paranoia68: dat is inderdaad waar ik op doelde :) probeer ook niet direct alles perfect te doen, zoals merethil al schreef, gaandeweg leer je ook de beste route. Een goede balans tussen toepassen en inlezen werkt het beste.

Acties:
  • +1 Henk 'm!

  • digidokter.net
  • Registratie: April 2014
  • Laatst online: 07-01-2024

digidokter.net

... en 'Niets' van 'Alles' LOL

Topicstarter
Bedankt voor jullie visie in de hogere programmeer sfeer.Ik ben op de juiste weg gewezen...mijn dank is groot! :)

Verstand van 'Alles' van 'Niets'

Pagina: 1