2016-07-06 3 views
2

EDIT:この問題は解決されました。私は例を必要とする将来の人のためにここに残しておきたいと思う。辞書にオブジェクトのリストを追加する

このコードでは、入力ファイルを取り込んで解析し、ファイルをクラスに渡し、オブジェクトを辞書に格納して、指定された形式でオブジェクトを書き出します。何か質問がある?私はそれらに答えてうれしいです!ここで

は私のコードです:ここでは

#C:\Python27\python.exe Animals(1).py 

inp = open("C:\Users\curnutte\Desktop\Assignment\Python Scripts\Python example\Classes\ClassTutorialInput.txt", "r") 
outp = open("C:\Users\curnutte\Desktop\Assignment\Python Scripts\Python example\Classes\ClassTutorialOutput.txt", "w") 

aniList = [] 

for line in inp.readlines(): 
    if line == '\n': 
     line = "nothing" 
    line = line.strip()              #removes '\n' 
    if line != '%% ================= %%':          #grabs all pertinent information 
     aniList.append(line)             #condenses lines to one line 
print(aniList) 

class Animals():                 #creates the Animals class 
    def __init__(self, species, features, diet, drinks, threats): 
     self.species = species 
     self.features = features 
     self.diet = diet 
     self.drinks = drinks 
     self.threats = threats 

my_animals=[] 

counter = 0 
for item in aniList:               #iterates through the input file 
    counter += 1 
    if counter == 1: 
     species = item 
     continue 
    if counter == 2: 
     features = item 
     continue 
    if counter == 3: 
     diet = item 
     continue 
    if counter == 4: 
     drinks = item 
     continue 
    if counter == 5: 
     threats = item 
     my_animals.append(Animals(species, features, diet, drinks, threats)) 
     counter = 0 
     continue 

animal_dict = {} 

for index in my_animals: 
    animal_dict[index.species] = (index) 
    print (animal_dict) 
    oldLook = index.features.split(",") 
    newLook = index.features 
    if len(oldLook) == 2: 
     newLook = oldLook[0].strip() + ' and ' + oldLook[1].strip() 
    if len(oldLook) > 2: 
     newLook = oldLook[:-1] 
     newLook = ",".join(newLook) 
     newLook = newLook + ' and ' + oldLook[-1].strip() 
    index.features = newLook 

    oldDiet = index.diet.split(",") 
    newDiet = index.diet 
    if len(oldDiet) == 2: 
     newDiet = oldDiet[0].strip() + ' and ' + oldDiet[1].strip() 
    if len(oldDiet) > 2: 
     newDiet = oldDiet[:-1] 
     newDiet = ",".join(newDiet) 
     newDiet = newDiet + ' and ' + oldDiet[-1].strip() 
    index.diet = newDiet 

    oldPred = index.threats.split(",") 
    newPred = index.threats 
    if len(oldPred) == 2: 
     newPred = oldPred[0].strip() + ' and ' + oldPred[1].strip() 
    if len(oldPred) > 2: 
     newPred = oldPred[:-1] 
     newPred = ",".join(newPred) 
     newPred = newPred + ' and ' + oldPred[-1].strip() 
    index.threats = newPred 
    outp.write("A %s has %s, eats %s, drinks %s, and is eaten by %s.\n" % (index.species, index.features, index.diet, index.drinks, index.threats)) 

inp.close() 
outp.close() 

は「ClassTutorialInput.txt」です:

deer 
fur, antlers, a peaceful disposition 
grass, leaves, roots 
water 
wolves, bear, mountain lions 
%% ================= %% 
fish 
scales, a clueless lifestyle 
bugs 
water 
sharks, humans 
%% ================= %% 
lion 
fur, manes, a blood-thirst 
antelope, humans 
water 

%% ================= %% 
human 
hair, skin 
vegetables, meat 
water 

%% ================= %% 
+0

印刷文で余分な括弧を削除してみます。 (Bambi.species、Bambi.features、Bambi.features、Bambi.features、Bambi.threats) 'を' print(Bambi.species、Bambi.features、Bambi.threats) 'に変更します。 –

+0

それはクリーンなものをアップしますちょっと!しかし、どうやって入力ファイルを3つの文字列として書くことができますか? – NewAtThis

答えて

0
for index in my_animals: 
oldDiet = index.diet.split(",") 
newDiet = index.diet 
if len(oldDiet) == 2: 
    newDiet = oldDiet[0].strip() + ' and ' + oldDiet[1].strip() 
if len(oldDiet) > 2: 
    newDiet = oldDiet[:-1] 
    newDiet = ",".join(newDiet) 
    newDiet = newDiet + ' and ' + oldDiet[-1].strip() 
index.diet = newDiet 

oldPred = index.threats.split(",") 
newPred = index.threats 
if len(oldPred) == 2: 
    newPred = oldPred[0].strip() + ' and ' + oldPred[1].strip() 
if len(oldPred) > 2: 
    newPred = oldPred[:1] 
    newPred = ",".join(newPred) 
    newPred = newPred + ' and ' + oldPred[-1].strip() 
index.threats = newPred 
outp.write("A %s has %s, eats %s, and is eaten by %s.\n" % (index.species, index.features, index.diet, index.threats)) 
0

あなたが行を追加して、入力ファイル内のすべての行を取得することができます:input_lines = inp.readlines()れますあなたの入力ファイルにあるすべての行のリストを返し、それを解析することができます。

+0

入力いただきありがとうございます!私はこの行を使って、入力ファイルにアクセスしました。今は、ファイルにどのような基準を設定するかを判断するだけです。私はループとifステートメントが必要と仮定しています。 – NewAtThis

+0

これにアプローチする方法はありますか? – NewAtThis

関連する問題