2016-04-19 2 views
0

Ich habe Wörterbuch deklariert. Ich möchte alle CSV-Dateien im Verzeichnis finden und wenn es einen Schlüssel aus dem Wörterbuch in seinem Namen hat, sollte es KeyFile Variable hinzugefügt werden. Wenn in seinem Namen eine Zeichenfolge unter Schlüssel vorhanden ist, sollte sie zu einer Liste FoundedFiles hinzugefügt werden.Finden Sie alle CSV-Dateien in dem Verzeichnis und fügen Sie gefundene Datei in die richtige Liste durch den Namen

Mein Code:

ScriptDirectory = os.path.dirname(__file__) 
csvFiles = find_csv_files(ScriptDirectory) 
Modules = { 
    'EGO_sgn': 'EgoMotion', 
    'FSD_sgn': 'FreeSpace', 
    'CAL_sgn': 'Calibration', 
} 
for key in Modules: 
    print key[:3]+'...' 
    FoundedFiles = [] 
    for filename in csvFiles: 
     if key in filename: 
      KeyFile = ScriptDirectory + '\\' + filename 
      for filename in csvFiles: 
       if Modules[key] in filename: 
        FoundedFiles.append(ScriptDirectory + '\\' + filename) 

Mein Code funktioniert einwandfrei, aber meine sollution ist wirklich hässlich, glaube ich. Ich lerne Python und bin mir sicher, dass es eleganter ist, aber ich weiß einfach nicht wie.

Antwort

2

Willkommen zur Python-Welt! :)

Zunächst einmal, wenn Sie tief verschachtelte Bedingungen oder Schleifen haben, sollten Sie Funktionen für eine einfache Aufgaben wie etwas im Dateinamen gefunden.

Zweitens - ich empfehle Ihnen, pep8 https://www.python.org/dev/peps/pep-0008 zu lesen. Es beschreibt eine Menge Dinge, die für Python-Entwickler benötigt werden, wie zB Variablennamen, Whitespaces und so weiter. Es übersetzt viele Sprachen, wenn Englisch nicht Ihre Muttersprache ist.

Drittens sollten Sie keine einfachen Schrägstriche im Dateinamen verwenden, verwenden Sie stattdessen os.path.join(). Es funktioniert perfekt in Unix-basierten Systemen, in Windows und auch überall.

Und vierte - sind Sie sicher, dass Sie nur eine key_file im csv-Verzeichnis haben können? Vielleicht sollte es auch eine Liste sein?

import os 

modules = { 
    'EGO_sgn': 'EgoMotion', 
    'FSD_sgn': 'FreeSpace', 
    'CAL_sgn': 'Calibration', 
} 

path_to_csv = os.path.join("path", "to", "your", "csv", "directory") 
founded_files = [] 
key_file = None 


def is_modules_in_filename(filename): 
    for module_key, module_value in modules.items(): 
     if module_key in filename: 
      return "key" 
     if module_value in filename: 
      return "value" 

    return False 


for f in os.listdir(path_to_csv): 
    if not f.endswith(".csv"): 
     continue 

    filename = os.path.splitext(f) 
    in_modules = is_modules_in_filename(filename[0]) 
    filename_with_path = os.path.join(path_to_csv, f) 

    if in_modules == "key": 
     key_file = filename_with_path 

    if in_modules == "value": 
     founded_files.append(filename_with_path) 

print(key_file) 
print(founded_files) 
+0

Vielen Dank für Ratschläge, ich werde sie verwenden :) Und ja, ich bin sicher, es gibt nur eine Schlüsseldatei, außerdem sollte es nicht noch mehr von ihnen sein. – GohanP

+0

Ich freue mich, wenn ich dir helfen kann :). – valex

Verwandte Themen