Avatar billede freelancegrafiker Nybegynder
02. april 2008 - 13:44 Der er 4 kommentarer og
1 løsning

Få navne på alle mapper og undermapper

Hej..
Ja, for at gøre det kort.. Jeg vil gerne have alle navnene(inklusiv sti) på de mapper og undermapper jeg har i det angivende sted..

Så, jeg vælger at starte fra desktop, og deri har jeg en mappe med en mappe med en mappe osv..

Så vil jeg ha stierne på alle mapperne ned i en arrayliste..


Jeg har forsøgt mig med noget .getdirectories, men den medtager ikke undermapper, og så skal jeg til at lave en ny .getdirectories for hver mappe den finder, og dér bliver det sku lige lidt for uoverskueligt for mig.. og håber der var en nemmere måde at udføre dette på..


Tak på forhånd..
Jan Philip
Avatar billede freelancegrafiker Nybegynder
02. april 2008 - 13:53 #1
Er måske lidt for hurtigt til at spørge..
Fandt dette:
http://www.dotnetspider.com/code/C-1351-Get-files-from-directory-subdirectory-using.aspx

Har ikke helt gennemskuet hvordan det virker, men det virker.. :-P
Avatar billede arne_v Ekspert
02. april 2008 - 14:43 #2
Tricket er at det er rekursivt.
Avatar billede bauerdata Nybegynder
21. maj 2008 - 23:25 #3
#!/usr/bin/env python
"""
index.py
usage: python index.py <starting-dir> <output-file>
"""

import os
import sys

from os  import stat
from os  import listdir
from os  import popen
from stat import S_ISDIR
from time import ctime

from xml.sax.saxutils import escape

XML_ENC = "ISO-8859-1"

"""""""""""""""""""""""""""""""""""""""""""""""""""
Class: Index(startingDir, outputFile)
"""""""""""""""""""""""""""""""""""""""""""""""""""
class Index:
  """
  This class indexes files and builds
  a resultant XML document.
  """
  def __init__(self, startingDir, outputFile):
    """ init: sets output file """
    self.outputFile = outputFile
    self.startingDir = startingDir

  def indexDirectoryFiles(self, dir):
    """Index a directory structure and creates an XML output file."""
    # prepare output XML file
    self.__fd = open(self.outputFile, "w")
    self.__fd.write('<?xml version="1.0" encoding="' +
                    XML_ENC + '"?>\n')
    self.__fd.write("<IndexedFiles>\n")

    # do actual indexing
    self.__indexDir(dir)

    # close XML file
    self.__fd.write("</IndexedFiles>\n")
    self.__fd.close()

  def __indexDir(self, dir):
    """Recursive function to do the actual indexing."""
    # Create an indexFile for each regular file,
    # and call the function again for each directory
    files = listdir(dir)
    for file in files:
      fullname = os.path.join(dir, file)
      st_values = stat(fullname)

      # check if its a directory
      if S_ISDIR(st_values[0]):
        print file

        # create directory element
        self.__fd.write("<Directory ")
        self.__fd.write(' name="' + escape(fullname) + '">\n')
        self.__indexDir(fullname)
        self.__fd.write("</Directory>\n")

      else:
        # create regular file entry
        print dir + file
        lf = IndexFile(fullname, st_values)
        self.__fd.write(lf.getXML())

"""""""""""""""""""""""""""""""""""""""""""""""""""
Class: IndexFile(filename, stat-tuple)
"""""""""""""""""""""""""""""""""""""""""""""""""""
class IndexFile:
  """
  Simple file representation object with XML
  """
  def __init__(self, filename, st_vals):
    """Extract properties from supplied stat object."""
    self.filename = filename
    self.uid = st_vals[4]
    self.gid = st_vals[5]
    self.size = st_vals[6]
    self.accessed = ctime(st_vals[7])
    self.modified = ctime(st_vals[8])
    self.created = ctime(st_vals[9])

    # try for filename extension
    self.extension = os.path.splitext(filename)[1]

    # check contents using file command on linux
    if os.name == "posix":
      # Open a process to check file
      # contents
      fd = popen("file \"" + filename + "\"")
      self.contents = fd.readline().rstrip()
      fd.close()
    else:
      # No content information
      self.contents = self.extension
     
  def getXML(self):
    """Returns XML version of all data members."""
    return ("<file name=\"" + escape(self.filename) + "\">" +
            "\n\t<userID>" + str(self.uid) + "</userID>" +
            "\n\t<groupID>" + str(self.gid) + "</groupID>" +
            "\n\t<size>" + str(self.size) + "</size>" +
            "\n\t<lastAccessed>" + self.accessed +
            "</lastAccessed>" +
            "\n\t<lastModified>" + self.modified +
            "</lastModified>" +
            "\n\t<created>" + self.created + "</created>" +
            "\n\t<extension>" + self.extension +
            "</extension>" +
            "\n\t<contents>" + escape(self.contents) +
            "</contents>" +
            "\n</file>")

"""""""""""""""""""""""""""""""""""""""""""""""""""
Main
"""""""""""""""""""""""""""""""""""""""""""""""""""
if __name__ == "__main__":
  index = Index(sys.argv[1], sys.argv[2])
  print "Starting Dir:", index.startingDir
  print "Output file:", index.outputFile

  index.indexDirectoryFiles(index.startingDir)
Avatar billede arne_v Ekspert
22. maj 2008 - 04:37 #4
Hvis man koder i VB.NET er Python nok ikke lige det mest oplagte ...
Avatar billede freelancegrafiker Nybegynder
18. maj 2010 - 03:03 #5
lukker gammelt spørgsmål
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester