2016-03-30 14 views
0

Bir dosya kontrol programının ilk aşamalarında kodlama yapmak ve çalışmak için yeni yapıyorum. Bir dosyanın başlığında "doğru bilgi" içerip içermediğini görmek için bir program yazıyorum.Dosya adının bir parçasının bir sözlükte veya listede mevcut olduğunu doğrulayın, Python 2.7

Şu anda bir başlıktaki part'un bir sözlükte veya listede kabul edilebilir bir adla eşleşip eşleşmediğini görmek için kontrol ediyorum.

Kodum aşağıda. 3'ten az parça içeren bir başlık koyarsam, bir hata atılır. Ancak, 3 parts ile bir başlığa koyarsam, parts listelerinden veya sözlüğünden hiçbiri uyuşmasa bile, programım başlığın doğru olduğunu iddia eder (ki o değil).

ben if-statements çünkü tamamının veya yılların kaba biliyorum ama her part için if-statements bir ton yazma yerine şu anda sahip olduğumuz en iyi fikir.

Kodun düzeltilmesinde bana yardımcı olan herhangi bir kişi, bir listenin veya sözlüğün bir parçası veya bir sözlükle karşılaştırıldığından emin olabilirsiniz.

bir örneği (doğru) bir dosya adı olacaktır: DJ_BR_UVT.xls ve yanlış bir dosya adının bir örneği : DJ_BR_staford.xls * bir not olarak, parts veya tür, okul, baş harfleri, herhangi bir sırada olabilir dosya adı.

def checkFilename(filename): 
    print 'filename = ' + filename 
    Parts = filename.split('_') 
if len(Parts) != 3: 
    print "There are " + str(len(Parts)) + " that is an incorrect amount of info in file name. There should be 3 parts to your file name" 
    return 

Part1 = Parts[0] 
Part2 = Parts[1] 
Part3 = Parts[2] 
Species_Dictionary = {'Brown Rat':'BR', 'Black Rat':'BLR', 'Dwarf Rat':'DR', 'White Mouse':'GG', 'Human':'HS', 'Brown Mouse':'VK'} 
School_List = ['UHJ', 'UMG', 'COL', 'UVT'] 
Initials_List = ['DM', 'DCM', 'YXAA', 'DJ'] 
Species_Check = 0 
School_Check = 0 
Initials_Check = 0 
# supposed to check to see if each 'part' can be found in the Species_Dictionary 
if Part1 or Part2 or Part3 in Species_Dictionary: 
    Species_Check = 1 
    print Species_Check 
else: 
    print "Cannot find a valid species" 
    return 

#check to see if any of the 'parts' can be found in the School-List 
if Part1 or Part2 or Part3 in School_List: 
    School_Check = 1 
else: 
    print "Cannot find valid school" 
    return 

#Check if any of the 'parts' are in the Initials_List 
if Part1 or Part2 or Part3 in Initials_List: 
    Initials_Check = 1 
else: 
    print "Cannot find valid initials" 
    return 

#If the previous 3 if-statements have been met, the file 'passes' and contains correct info 
if Species_Check == 1 and School_Check == 1 and Initials_Check == 1: 
    print "Your file contains correct title information" 
else: 
    print "Your file name does not contain the correct information" 
    return 
+0

yazdırır: Dosya adları herhangi bir sırada olabilir. Türler, Harfler ve Okul zorunlu olarak her zaman 1., 2. ve 3. sırada değildir. Bu yüzden iki listeden ve sözlükten farklı 'parçaları' çalıştırmak istedim ... çünkü dosya adının herhangi bir kısmı tür/ad/okul içerebilir. Özel bir sipariş yok. – umgcoder

cevap

1

Durum if Part1 or Part2 or Part3 in Species_Dictionary:, düşündüğünüz şeyi yapmayacaktır.

dosya adı DJ_BR_UVT.xls ise

sonra parts DJ, BR ve UVT.xls olacaktır. Uzantıyı kaldırmanız gerekiyor.

PARTS1 = ('BR','BLR','DR','GG','HS','VK') 
PARTS2 = ('UHJ', 'UMG', 'COL', 'UVT') 
PARTS3 = ('DM', 'DCM', 'YXAA', 'DJ') 
def checkFilename(filename): 
    f = filename.split('.')[0] # this removes the extension 
    parts = f.split('_') 
    nb1, nb2, nb3 = 0, 0, 0 
    for p in parts: 
    if p in PARTS1: nb1 += 1 
    if p in PARTS2: nb2 += 1 
    if p in PARTS3: nb3 += 1 
    return nb1 == 1 and nb2 == 1 and nb3 == 1 

print (checkFilename("DJ_BR_UVT.xls")) 
print (checkFilename("DJ_BR_staford.xls")) 

bu açık bilgi için

True 
False 
+0

büyük yanıt ... parçaların gerçekten herhangi bir düzen olabileceğini varsayarak (ve dosya dosyasında bir dosyada veya birden fazla süre bulunmadığı (tam olarak belirtilebilir veya olmayabilir: P) ama evet buna göre çalışmalıyım. sağlanan şartname :) –

İlgili konular