Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / School & Studie / Huiswerkvragen: Exacte vakken
Reageren
 
Topictools Zoek in deze topic
Oud 12-09-2008, 18:36
TrippV
Hallo,

Ik ben voor school een programma aan het schrijven. Een van de dingen die het programma moet doen is een bepaald bestand inlezen. Nou dacht ik dat ook handig zou zijn als de gebruiker zelf kan zeggen welk bestand er moet worden ingelezen. Maar daar gaat schijnbaar iets fout.

Code:
 

def Inlezen():
        inlezen1 = raw_input("Geef de naam van het bestand dat u wilt inlezen: ")
        inlezen2 = open('inlezen1.txt', 'r')
        inlezen2 = inlezen2.read()
        print inlezen2
    
    Inlezen()
Er word wel naar de naam van het file gevraagd, maar daarna treed er een probleem op.
De foutmelding die ik dan krijg is:

inlezen2 = open('inlezen1.txt', 'r')
IOError: [Errno 2] No such file or directory: 'inlezen1.txt'

Kan iemand helpen?
Ik kan het ook op school vragen, maar dan moet ik weer wachten tot maandag. En ik wou dit programma dit weekend af maken.
Met citaat reageren
Advertentie
Oud 12-09-2008, 22:46
-Nils-
-Nils- is offline
Bestaat het bestand inlezen1.txt wel, in dezelfde map als waar je script is opgeslagen?
Met citaat reageren
Oud 13-09-2008, 00:10
gast hier
Het gaat fout op de manier hoe je de file wilt openen. Je maakt met raw_input een string aan van je file naam. Dit is goed maar daarna wil je het bestand 'inlezen1.txt' openen wat natuurlijk niet bestaat.

Ervan uitgaande dat je bijvoorbeeld het bestand input.txt wilt inlezen. Je vult dan denkt ik zelf 'input' in. Daarna moet er nog '.txt' aan toegevoegd worden op het te openen Bij python gaat dit gewoon met een +. Je 3e regel wordt dan inlezen2 = open(inlezen1+'.txt'). Als je zelf 'input.txt' invult dan kun je gewoon werken met open(inlezen1)
Met citaat reageren
Oud 13-09-2008, 11:19
ILUsion
Avatar van ILUsion
ILUsion is offline
Je gebruikt inderdaad allerhande dingen door elkaar. Ik zal de bijhorende procedure voor je schrijven, en dan uitleggen:

Code:
def inlezen():
    filename = raw_input('Geef de naam van het bestand dat u wilt inlezen: ')
    filename += '.txt'
    try:
        fo = open(filename,'r')
        contents = fo.read()
        fo.close()
        return contents
    except:
        print 'Er is een fout opgetreden. Controleer dat het bestand dat u opgegeven hebt, bestaat.'
Ik ga nu lijn per lijn uitleg geven:
  1. procedure aanmaken
  2. bestandsnaam inlezen en opslaan in de variabele 'filename'
  3. achter de bestandsnaam in 'filename' nog eens ".txt" plakken, omdat je dat blijkbaar wilt doen. Er zijn hier ook andere methodes voor, maar deze is de simpelste.
  4. try-block. Ik vermoed dat je niet weet wat voor iets dat is. Maar het is wat het zegt: we gaan iets 'proberen', waarvan we kunnen zeggen dat er misschien iets misgaat (het bestand bestaat niet bv.)
  5. we maken een file object 'fo' aan. Een file object kan je zien als een manier voor Python om in dat bestand te prutsen, een beetje het bestand vastnemen zoals je dat in het echte leven ook zou doen: je hebt wel een hoop documenten die je kan beschrijven met een naam, maar je moet ze ook werkelijk vastnemen om er iets mee te kunnen doen. In dit geval maken we een file object voor een bestand met bestandsnaam die in de variabele filename zit en we werken in 'read'-modus ('r', dus alleen-lezen). Hiermee hebben we het bestand dus geopend.
  6. we lezen de inhoud van het bestand en slaan het op in de variabele 'contents'.
  7. en tot slot sluiten we het bestand
  8. de inhoud (variabele 'contents') teruggeven aan het hoofdprogramma (let wel: dit is NIET hetzelfde als print). Je mag dat gerust vervangen door een print. Maar met een return kan je de procedure ook gebruiken om de inhoud van het bestand voor een ander deel van je programma te gebruiken.
  9. except-block. Dit is een blok dat samenhangt met het try-block. Als er in het try-block iets misgaat, kan je dat in het except-block proberen op te vangen.
  10. De fout mooi opvangen, wel, dat ga ik hier niet doen; maar ik geef gewoon een boodschap op het scherm.

Een andere tip die ik geef: werk niet met namen als 'inlezen1', ... De reden dat je namen kan kiezen in talen als Python is juist om dat te vermijden. Om een goed leesbaar (voor jezelf en voor anderen) programma te maken, maak je best namen die iets meer zeggen over wat ze doen. Ik hou me daar meestal bij Engelse namen (omdat dat voor Python vaak ook aangeraden wordt, en ik het wat stom vind staan om Nederlandse namen in Engelse broncode te zien). Maar als je ergens ziet staan 'print inlezen51346' dan, moet jij weer gaan zoeken wat die variabele inlezen51346 ook alweer was en of het niet per toeval inlezen52346 moest zijn. Als je daarentegen 'print contents' of 'print contentsOfFile' of iets dergelijks zet, dan zie je sneller wat er weergegeven gaat worden. Als je zelf liever Nederlandse namen gebruikt is dat natuurlijk perfect; maar nummers in je namen van variabelen gebruiken; dat is slechts in heel beperkte gevallen nodig, lijkt me.
__________________
vaknar staden långsamt och jag är full igen (Kent - Columbus)
Met citaat reageren
Oud 15-09-2008, 09:48
Tripp
Avatar van Tripp
Tripp is offline
Ik heb de code nu inderdaad een beetje aangepast. En ook een aantal andere delen. Het werkt nu inderdaad allemaal veel beter. Nu snap ik ook wat er fout was. Ook wel leuk voor de volgende keer.

Thanks.
__________________
They say it is for the commen good.
But good, is not the same as right.
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 17:54.