2017-09-17 4 views
0

Sous le code Python, le fichier "/ home/sam" sera lu et traversé par os.walk().Comment écrire la sortie de os.walk() dans un fichier en python 3

Les trois attributs que nous recevons de os.walk(), qui sera lu en utilisant la boucle « for » et sera écrit dans le fichier « Dir_traverse_date.txt »

Mon problème est lorsque le programme est fait en exécutant le code. Le seul mot écrit dans le fichier "Dir_traverse_date.txt" est - None.

Comment résoudre ce problème? Comment obtenir la sortie de la fonction dans le fichier texte

=========================== CODE = ====================================

import os 

def dir_trav(): 

    os.chdir("/home/sam") 
    print("Current Directory", os.getcwd()) 
    for dirpath,dirname,filename in os.walk(os.getcwd()): 
     print ("Directory Path ----> ", dirpath) 
     print ("Directory Name ----> ", dirname) 
     print ("File Name  ----> ", filename) 
    return 




funct_out=dir_trav() 

new_file=open('Dir_traverse_date.txt','w') 

new_file.write(str(funct_out)) 

new_file.close() 

======= ============================================= ================

+0

'dir_trav' ne retourne vraiment rien (ce qui signifie qu'il retourne' None' et c'est ce que vous écrivez dans le fichier). – alfasin

+0

Vous devez retourner quelque chose de la fonction. A noter également, 'os.walk' itére sur le répertoire donné et ses sous-répertoires. Chaque itération renvoie un chemin de répertoire, la * liste des sous-répertoires de ce chemin * et la * liste des fichiers de ce chemin *. Il ne renvoie pas un nom de répertoire et un fichier par itération comme votre nom l'indique. –

+0

Fournissez un exemple de la sortie de fichier attendue. –

Répondre

-1

Vous n'avez rien retourné. Ne sont pas des fonctions NoneTypes?

import os 

def dir_trav(): 
    os.chdir("/home/sam") 
    print("Current Directory: ", os.getcwd()) 
    data = [] 
    for dirpath, dirnames, filenames in os.walk(os.getcwd()): 
     for name in filenames: 
      filename = os.path.join(dirpath, name) 
      data.append(filename) 
    return data 


new_file = open('Dir_traverse_date.txt', 'w') 

for filename in dir_trav(): 
    new_file.write(filename) 
    new_file.write('\n'); 

new_file.close() 
+0

Et je ne peux pas commenter parce que j'ai moins de 50 réputation. –

+0

Cela ne va que renvoyer le dernier ensemble de l'itérateur 'os.walk'. –

+0

@MarkTolonen je sais que je l'ai réparé –

0

En Python return doit être suivi de l'objet que vous souhaitez la fonction pour revenir. Vous pouvez commencer en plaçant manuellement une chaîne codée en dur dans la ligne de retour. Par exemple, return "To Sender" Votre fichier doit maintenant contenir le texte "À expéditeur" au lieu de "Aucun". Essayez ceci avec quelques autres chaînes ou nombres pairs. Peu importe où vous exécutez os.walk votre sortie sera toujours la même. Ce qui compte, c'est ce que vous placez à côté de return.

Votre objectif est de construire une chaîne à partir des données recueillies pour vous par os.walk et de le renvoyer. Je vois que vous imprimez déjà certaines données. Commençons par corriger cela en rassemblant simplement les noms de fichiers. Commencez avec une chaîne vide, puis accumulez votre sortie avec l'opérateur +=.

def dir_trav(): 

    os.chdir("/home/sam") 
    print("Current Directory", os.getcwd()) 

    output = '' 
    for dirpath, dirname, filename in os.walk(os.getcwd()): 
     output += filename   

    return output 

Maintenant, vous remarquerez que votre sortie changera d'inclure les noms de fichiers, mais ils vont tous être coincé bout à bout (par exemple file1file2file3) En effet, nous devons nous assurer que nous insérons à des sauts de ligne après chaque morceau de données que nous extrayons.

def dir_trav(): 

    os.chdir("/home/sam") 
    print("Current Directory", os.getcwd()) 

    output = '' 
    for dirpath, dirname, filename in os.walk(os.getcwd()): 
     output += filename + '\n' 

    return output 

À partir de ce point, vous devriez pouvoir vous rapprocher des résultats que vous recherchiez. La concaténation de chaînes (+) n'est pas la méthode la plus efficace pour créer des chaînes à partir de plusieurs données, mais elle servira vos objectifs.

Remarque: Les fonctions en Python peuvent renvoyer plusieurs valeurs, mais elles sont techniquement liées dans un seul objet qui est essentiellement un tuple.