2016-07-28 11 views
0

Ich möchte alle Dateien in einem Verzeichnis lesen. Verzeichnis enthält folgende Dateien:Python: Wie liest man alle Dateien im Verzeichnis mit bestimmten Bedingungen?

ABC11_1.csv 
ABC11_3.csv 
ABC11_2.csv 
ABC13_4.csv 
ABC13_1.csv 
ABC17_6.csv 
ABC17_2.csv 
ABC17_4.csv 
ABC17_8.csv 

Wenn ich mein Skript betreibe ich diesen Dateinamen geben wollen auf der Konsole im Format wie: ABC11.

Danach möchte ich alle Dateien mit nur ABC11-Erweiterungen in der sortierten Reihenfolge lesen. d.h. zuerst ABC11_1.csv, ABC11_2.csv, ABC11_3.csv so.

Wenn Benutzer gibt nur ABC-Anwendung muss Fehlermeldung geben. Wenn der Benutzer nur ABC1 gibt, dann ist es eine gültige Anwendung, die dies akzeptiert und das Verzeichnis nach Dateien mit der Erweiterung ABC1 eincheckt, falls vorhanden, dann verarbeite die Dateien in sortierter Reihenfolge, wenn nicht, dann Fehlermeldung.

Programm-Code-

from glob import glob 
import os 
import sys 

file_pattern = '' 
files_list = list() 
arguments = {'ABC', 'PQR', 'XYZ'} 

if len(sys.argv[1:2]) is 1: 
    file_pattern = str(sys.argv[1:2]) 
else: 
    print 'run as <python test.py ABC>' 
    sys.exit(1) 
if file_pattern in arguments: 
    print '<Provide LineName with some Number>' 
    sys.exit(1) 

file_pattern = file_pattern.replace('[','').replace(']','').replace('\'','') 

if file_pattern.startswith('ABC',0,3): 
    files_list = glob(os.path.join('<directory name>', str(file_pattern)+'_*.csv')) 
else: 
    print 'No Such File --> ' + str(file_pattern)+ '\t <Provide appropriate Name>' 
    sys.exit(1) 

if files_list: 
    for a_file in sorted(files_list): 
     print a_file 
    #process file 
else: 
    print 'No Such File --> ' + str(file_pattern)+ '\t <Provide appropriate Name>' 
    sys.exit(1) 

Ich bin wie das zu tun, und es Arbeit für mich in Ordnung, aber ist, dass andere beste Möglichkeiten, um diese Dinge zu tun. Bitte geben Sie alle Ihre Antworten an?

Danke.

Antwort

-1

Nach Ihrer Frage Code folgende Pseudo sollte

import os 

# Read all files from a directory, and read your input argument 
files = os.listdir("your_input_directory_path") 
input_argument = "ABC11" 

# Sort file names by name 
files = sorted(files) 

relevant_files = [] 
for file_name in files: 
    # Your Conditions goes here ........ 

    if file_name.startswith(input_argument): 
     relevant_files.append(file_name) 



if relevant_files: 
    return "Error | Not Found" 
else: 
    return relevant_files 
+0

arbeiten @ userxxx- Ist es alle meine Anforderungen erfüllen, die ich in der Frage zur Verfügung gestellt? – kit

+0

Ja, versuchen Sie, diesen Code auszuführen .. es kann einige kleine Änderungen entsprechend Ihrer Anforderung geben. Aber ich denke, das wird nach dem funktionieren, was Sie in Ihrer Frage erwähnt haben – userxxx

+0

@ userxxx- Wenn Benutzer geben ABC1 Argument, so sollte es nur für ABC1_ (whaterver) -Datei überprüfen. Es sollte keine ABC11_1.csv-Datei zurückgeben. – kit