Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [Python] Kansioiden ja alikansioiden sisältö

jokupoika [15.06.2009 00:15:38]

#

Moi. Haluaisin tehdä pienen ohjelman jolle syötetään kansio, ja se tulostaa kaikkien tiedostojen nimet kansiosta ja alikansioista tiedostoon.

En osaa pythonia YHTÄÄN jos totta puhutaan. Ajattelin tehdä C++:lla mutta sillä on kaikki aina niin s***anan monimutkasta niin päätin kokeilla jotain toista kieltä, ja kappas kappas sehän oli äärimmäisen yksinkertaista. Tällaisen sain pienellä googletuksella ja tutoriaalin kahluulla aikaan:

import os

print 'The Ultimate Tiedoston Nimi Listaaja'
print 'Anna listattavan kansion polku muodossa esim C:/kansio'
print 'Tiedosto LISTAUS.txt tallentuu siihen hakemistoon,'
print 'mista tama ohjelma ajetaan\n\n'

polku = str(raw_input("Anna polku: "))
for fileName in os.listdir ( polku ):

        fileHandle = open ( 'LISTAUS.txt', 'w' )
        for fileName in os.listdir (polku):
            fileHandle.write ( fileName + '\n' )

        fileHandle.close()

print 'Valmista tuli!'

Toi toimii muuten paitsi se ei hae alikansioista, ainoastaan kirjoittaa alikansion nimen sinne tiedostoon.

Chiman [15.06.2009 00:32:21]

#

Hyvä, mutta avaatko ja suljetko tiedoston tarkoituksella silmukan sisällä?

os.walk tehnee sen mitä haluat:

import os

polku = raw_input('Anna polku: ')
listatiedosto = open('LISTAUS.txt', 'w')

for root, dirs, files in os.walk(polku):
    # hakemisto kerrallaan, kaikki sen tiedostot:
    for f in files:
        listatiedosto.write(os.path.join(root, f) + '\n')

listatiedosto.close()

Päärynämies [15.06.2009 00:32:49]

#

Rekursio ratkaisee tällaiset ongelmat. Vilkaise putkan opasta aiheest: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=rekursio Tuolta löytyy pseudokoodina esimerkkinä juuri tiedostojen listaaminen.

Edit: Joo, os.path taitaa myös homman hoitaa. Rekursiolla voi sitten toteuttaa vaikka vain harjoituksen vuoksi.

jokupoika [15.06.2009 00:38:30]

#

Chiman kirjoitti:

Hyvä, mutta avaatko ja suljetko tiedoston tarkoituksella silmukan sisällä?

os.walk tehnee sen mitä haluat:

import os

polku = raw_input('Anna polku: ')
listatiedosto = open('LISTAUS.txt', 'w')

for root, dirs, files in os.walk(polku):
    # hakemisto kerrallaan, kaikki sen tiedostot:
    for f in files:
        listatiedosto.write(os.path.join(root, f) + '\n')

listatiedosto.close()

Joo ei se mikään harkittu teko ollut laittaa silmukan sisään noita tiedoston avaamista ja sulkemista =)

Kiitos, toi toimii kivasti, mutta se tallentaa koko polun, pelkkä tiedoston nimi riittäisi =)

Chiman [15.06.2009 00:52:57]

#

Ok, sitten käytä pelkkää f:ää tuon writen sisällä :)

jokupoika [15.06.2009 00:55:33]

#

Noniin, olipas yksinkertaista. Kiitos.

Pitää varmaan alkaa opiskeleen pythonia, mielenkiintoinen kieli.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta