2017-03-22 54 views
-1

我有持有2動物信息 [('alyson', '5', 'dog'), ('merlin', '6', 'cat')] 我需要在列表重新排列動物品種,姓名,年齡的順序,然後去除特殊字符,並將它們寫回到列表一個.txt文件。 我試過.remove作爲一個列表。我的下一個試驗和錯誤是將列表轉換爲字符串,並嘗試使用.replace方法。沒有任何方法奏效。我可能錯誤地使用了它們。任何意見,我在哪裏可以看看,非常感謝重排列表,並刪除特殊字符

編輯:該程序是假設拉動動物信息的格式是:品種,名稱,年齡。在我的一個功能中,我需要重新排列它並輸出它的名字,年齡,品種。然後用戶會提示動物是否被採納或是否有新的動物進入,我的寵物列表會反映這一點。一旦用戶完成,程序將把更新後的列表保存回原來的格式。我遇到了特殊字符的問題。我做pet_list [0],它會給我(「阿利森」的輸出的打印測試,

#This function opens the file and arranges it into an output order 
#format of the file would be: dog, alyson, 5 
def get_pet(file): 
    f = open(file) 
    pet_info = f.readlines() 
    pet = [] 
    for line in pet_info: 
     info = line.split() 
     pet_type = info[0] 
     name = info[1] 
     age = info[2] 
     pet.append((name, age, pet_type)) 
    return pet 

#this is the function where i was planning on rearranging the list back to how it originally was and 
#rewrite them back onto a text file 
def do_save(pet_list, current_file, transfer, adopt_list, transfer_list): 
    shelter_list = open(current_file, 'w') 
    print(pet_list) 
    print(type(pet_list)) 
    for line in pet_list: 
     print(type(line)) 
     shelter_list.write(str(line)) 
    shelter_list.close() 
    adopt = open("adopted.txt", 'w') 
    adopt.write(str(adopt_list)) 
    adopt.close() 
    transfer_file = open(str(transfer), 'w') 
    transfer_file.write(str(transfer_list)) 

    transfer_file.close() 
+1

如果您希望人們提供幫助,您需要包括樣本輸入,期望的輸出以及「什麼都不工作」的描述。 –

+0

對不起,如果我沒有更清楚。虐待編輯它以反映, –

+0

這是你想要的:'shelter_list.write(「」.join(line)+「\ n」)' – Barmar

回答

0

如果你只是想重新安排每個項目並寫入文件。你可以字符串格式中的每個項目。pet_list要轉換(品種,姓名,年齡)至(姓名,年齡,品種),你可以使用這樣的事情:

pet_list = [('dog', 'alyson', '5'), ('cat','merlin','10')] 

for i in pet_list: 
    print("{1} {2} {0}".format(*i)) 

結果

alyson 5 dog 
merlin 10 cat 

在這裏,我展示瞭如何打印,但而不是打印,你可以寫入文件

+0

非常感謝你。 –

2

如果您有元組(或列表)的列表,您可以使用itemgetter通過多個鍵對其進行排序。與虛擬數據的一個例子:

import operator 
mylist=[ 
('an2d4', '1', 'kitty'), 
('an2d4', '2', 'kitty'), 
('an2d4', '3', 'kitty'), 
('an2d4', '1', 'puppy'), 
('an2d4', '2', 'puppy'), 
('an2d4', '3', 'puppy'), 
('[email protected]', '1', 'bear'), 
('[email protected]', '2', 'bear'), 
('[email protected]', '3', 'bear'), 
('[email protected]', '1', 'wombat'), 
('[email protected]', '2', 'wombat'), 
('[email protected]', '3', 'wombat') 
] 

mylist.sort(key=operator.itemgetter(2,0,1)) 

調用MYLIST則表明它已經被在第二指數(種)該項目第一排序,然後第0指數(名稱),然後第一個指數(年齡)。

for i in mylist: 
    print i 

('[email protected]', '1', 'bear') 
('[email protected]', '2', 'bear') 
('[email protected]', '3', 'bear') 
('an2d4', '1', 'kitty') 
('an2d4', '2', 'kitty') 
('an2d4', '3', 'kitty') 
('an2d4', '1', 'puppy') 
('an2d4', '2', 'puppy') 
('an2d4', '3', 'puppy') 
('[email protected]', '1', 'wombat') 
('[email protected]', '2', 'wombat') 
('[email protected]', '3', 'wombat') 

然後,您可以編寫一個函數來接受你的3項元組條目,並返回沒有名稱的特殊符號的輸入,並通過你的名單列表進行迭代。

def fixName(entry): 
    name = entry[0] 
    fixedName = ''.join([x for x in name if x.isalpha()]) 
    return((fixedName, entry[1], entry[2])) 

mylist=[ fixName(x) for x in mylist] 

for i in mylist: 
    print i 

('bddy', '1', 'bear') 
('bddy', '2', 'bear') 
('bddy', '3', 'bear') 
('and', '1', 'kitty') 
('and', '2', 'kitty') 
('and', '3', 'kitty') 
('and', '1', 'puppy') 
('and', '2', 'puppy') 
('and', '3', 'puppy') 
('bddy', '1', 'wombat') 
('bddy', '2', 'wombat') 
('bddy', '3', 'wombat') 

然後迭代您的列表並寫入文本文件,無論您想要的任何分隔符。

with open('out.txt', 'w') as outfile: 
    for entry in mylist: 
     outfile.write('\t'.join(entry)+'\n')