2016-03-28 11 views
0

Ich habe Schwierigkeiten, Dateien in einem Verzeichnis zu durchlaufen, das sich von dem Verzeichnis unterscheidet, in dem das Skript geschrieben wurde. Ich möchte auch idealerweise, dass mein Skript durch alle Dateien läuft, die mit sasa beginnen. Es gibt ein paar Dateien im Ordner wie sasa.1, sasa.2 etc ... sowie andere Dateien wie doc1.pdf, doc2.pdfPython: Durch Dateien in einem anderen Verzeichnis scannen und Daten scannen

ich Python Version 2.7 mit Windows Powershell verwenden

Standorte von Alles

1) Python Script Ort ex: C:Users\user\python_project

2) Main_Directory ex: C:Users\user\Desktop\Data

3) Current_Working_Directory ex: C:Users\user\python_project

Hauptverzeichnis enthält 100 Ordner (Ordner A, B, C, D etc ..) Jeder dieser Ordner viele Dateien einschließlich der sasa Dateien von Interesse enthält.

Versuche Skript

Für 1 Datei folgende Arbeiten ausgeführt werden:

Script ausgeführt wird, die folgende Art und Weise: python script1.py

file_path = 'C:Users\user\Desktop\Data\A\sasa.1 

def writing_function(file_path): 
    with open(file_path) as file_object: 
     lines = file_object.readlines() 

for line in lines: 
print(lines) 

writing_function(file_path) 

Allerdings ist die folgende nicht

arbeiten

Skript wird folgendermaßen ausgeführt: python script1.py A sasa.1

import os 
import sys 
from os.path import join 

dr = sys.argv[1] 
file_name = sys.argv[2] 

file_path = 'C:Users\user\Desktop\Data' 
new_file_path = os.path.join(file_path, dr) 
new_file_path2 = os.path.join(new_file_path, file_name) 

def writing_function(paths): 
    with open(paths) as file_object: 
     lines = file_object.readlines() 

for line in lines: 
    print(line) 

writing_function(new_file_path2) 

bekomme ich folgende Fehlermeldung:

with open(paths) as file_object:
IO Error: [Errno 2] No such file or directory:
'C:Users\\user\\Desktop\\A\\sasa.1'

Bitte beachten Sie jetzt ich nur auf eine Datei arbeite, möchte ich Schleife in der Lage sein, durch alle Die SASA-Dateien im Ordner.

+0

Verwenden Sie "os.walk" – chapelo

Antwort

0

Es kann etwas in der Linie sein:

import os 
from os.path import join 

def function_exec(file): 
    code to execute on each file 

for root, dirs, files in os.walk('path/to/your/files'): # from your argv[1] 
    for f in files: 
     filename = join(root, f) 
     function_exec(filename) 

Vermeiden Sie die Variable dir verwenden. Es ist ein Python-Schlüsselwort.Versuchen print(dir(os))

dir_ = argv[1] # is preferable 
+0

Könnte ich nur den Ordnernamen im argv übergeben oder muss ich den gesamten Dateipfad übergeben? Im Idealfall möchte ich nur den Ordnernamen in das Argument setzen. Ich könnte wahrscheinlich den gesamten Pfad im Code den ganzen Weg bis zum Hauptordner haben, aber ich möchte Benutzer einfach den Ordnernamen für den einen geben das enthält die Dateien. –

+0

Sie können 'os.path.join()' verwenden, um einem Basisverzeichnis wie demjenigen, in dem Sie Ihre Daten gespeichert haben, "2) Main_Directory ex: C: Users \ user \ Desktop \ Data" und den von Ihrem Benutzer eingegebenen Verzeichnissen beizutreten. Überprüfen Sie die Dokumentation unter https://docs.python.org/3/library/os.path.html?highlight=join#os.path.join – chapelo

+0

Wenn das Verzeichnis relativ zu Ihrem aktuellen Verzeichnis ist, können Sie es auch verwenden, um es zu bekommen mit 'os.getcwd()' – chapelo

0

beachten Sie können auch Verzeichnisort

os.chdir(path) 
+0

Ich habe versucht, os.chdir (folder_name) zu verwenden, wenn ich den Ordnernamen in das Verzeichnis übertrage. Wie würde ich den ganzen Weg weitergeben, ohne es zu wissen? –

0

Niemand glob so weit, so genannte Verwendung ändern: https://docs.python.org/3/library/glob.html

ich glaube, Sie Ihr Problem mit seiner ** Magie lösen kann :

If recursive is true, the pattern “**” will match any files and zero or more directories and subdirectories. If the pattern is followed by an os.sep, only directories and subdirectories match.

Verwandte Themen