2016-12-24 4 views
3

Ich versuche, alle Verzeichnisse aufzulisten (eine Ebene unter/home/dir) und es ist Inhalt. Dieser Code funktioniert, aber wenn ich das Wörterbuch in den Pandas-Datenrahmen umwandle, stimmt der Verzeichnisname nicht mit den Dateinamen überein.Gehen durch Verzeichnispfad

mypath='/home/' 
from os import walk 

myd=dict() 
for (dirpath, dirnames, filenames) in walk(mypath): 
    for i in dirnames: 
     for (dirpath1, dirnames1, filenames1) in walk(i): 
      myd[i]=','.join(filenames1) 


import pandas as pd 
df=pd.DataFrame(myd , index=[0]).T 
df.columns=['files'] 

pd.set_option('max_colwidth', 800) 
df 

Gibt es eine bessere Möglichkeit, 2-Spalten-Datenrahmen mit Verzeichnis und seinen Dateiinhalten zu erstellen?

Antwort

2

Ich bin nicht genau sicher, wie Ihr Endergebnis aussehen sollte, aber os.walk macht die volle Rekursion für Sie! Es besteht keine Notwendigkeit, über die dirnames in einer zweiten Schleife iterieren:

import os 

mypath = '/home/' 

myd = {} 
for (here, dirs, files) in os.walk(mypath): 
    for file in files: 
     myd[here] = '.'.join(files) 

print(myd) 

Dies ist Python 3-Code; es Python 2 file ist ein Schlüsselwort, und sollte nicht als Variablennamen ...

UPDATE

wenn Sie nur einen brauchen es unter dem Eingabeverzeichnisebene verwendet werden, besteht keine Notwendigkeit, walk:

myd = {} 
for name in os.listdir(mypath): 
    subdir = os.path.join(mypath, name) 
    if not os.path.isdir(subdir): 
     continue 
    myd[name] = '.'.join(os.listdir(subdir)) 

print(myd)