2013-07-18 13 views
9

Tentativo di eseguire il drill-through di una directory sull'unità in cui sono presenti sottocartelle. Quando trovo i file con le estensioni dei file che sto cercando, voglio il percorso completo del file. In questo momento questo è quello che ho:Python non può ottenere il nome completo del percorso del file

import os 
import Tkinter 
import tkFileDialog 
from Tkinter import Tk 
from tkFileDialog import askopenfilename 

root = Tkinter.Tk().withdraw() 
dirname = tkFileDialog.askdirectory(initialdir='.') 

list = [] 


for root, dirs, files in os.walk(dirname): 
    for name in files: 
     if name.find(".txt") != -1: 
      name = str(name) 
      name = os.path.realpath(name) 
      list.append(name) 

print list 

Questo viene restituito

c:\users\name\desktop\project\file.txt 

, tuttavia, che si trova nel file.txt

c:\users\name\desktop\project\folder1\file.txt 

risposta

8

Probabilmente è necessario unire il nome del file con la directory che lo contiene:

os.path.realpath(os.path.join(root,name)) 

esempio Ho appena provato questo:

import os 
for root, dirs, files in os.walk('.'): 
    for name in files: 
     if name == 'foo': 
      name = str(name) 
      name = os.path.realpath(os.path.join(root,name)) 
      print name 

con la seguente struttura di directory:

test 
    + foo 
    + test2 
    + foo 

e ha funzionato correttamente.

+1

ha funzionato perfettamente grazie! Non so perché stavo ricevendo voti su questo quando l'altra domanda che era già stata fatta non ha nemmeno risposto alla mia stessa domanda ... – shreddish

+0

@reddman - FWIW, non ho capito neanche i downvotes. Ho votato in su. :) – mgilson

+0

haha ​​grazie ancora – shreddish

0

Usa:

os.path.abspath 

invece . Il tuo percorso non è assoluto.

+0

ho provato abspath restituisce lo stesso risultato – shreddish

Problemi correlati