2016-01-16 81 views
0

我需要創建一個程序來保存人們的信息,例如他們的姓在一個文本文件中,具體取決於他們的姓氏的第一個字母,所以如果他們的姓以K開頭,那麼它將進入MyFile1如何在文件中寫入新行?

我需要它像我做的那樣循環,因爲它是未知數量的人,但是我希望每個人在文本文件的不同行寫入是有辦法做到這一點。

底部的代碼將每個單獨的信息放到一個新行中,我不希望我希望每個不同的人都在一個新的行中。

MyFile1 = open("AL.txt", "wt") 
MyFile2 = open("MZ.txt", "wt") 
myListAL = ([]) 
myListMZ = ([]) 

while 1: 
    SurName = input("Enter your surname name.") 
    if SurName[0] in ("A","B","C","D","E","F","G","H","I","J","K","L"): 
     Title = input("Enter your title.") 
     myListAL.append(Title); 
     FirstName = input("Enter your first name.") 
     myListAL.append(FirstName); 
     myListAL.append(SurName); 
     Birthday = input("Enter birthdate in mm/dd/yyyy format:") 
     myListAL.append(Birthday); 
     Email = input("Enter your email.") 
     myListAL.append(Email); 
     PhoneNumber = input("Enter your phone number.") 
     myListAL.append(PhoneNumber); 
     for item in myListAL: 
      MyFile1.write(item+"\n") 

    elif SurName[0] in ("M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"): 
     Title = input("Enter your title.") 
     myListMZ.insert(Title); 
     FirstName = input("Enter your first name.") 
     myListMZ.append(FirstName); 
     myListMZ.append(SurName); 
     Birthday = input("Enter birthdate in mm/dd/yyyy format:") 
     myListMZ.append(Birthday); 
     Email = input("Enter your email.") 
     myListMZ.append(Email); 
     PhoneNumber = input("Enter your phone number.") 
     myListMZ.append(PhoneNumber); 
     line.write("\n") 
     for item in myListMZ: 
      MyFile2.write(line) 

    elif SurName == "1": 
     break 


MyFile1.close() 
MyFile2.close() 
+3

在您的問題描述中,您會說「我希望每個人都寫在不同的行中」以及「我不希望我希望每個不同的人都在一個新的行中」。請澄清你的意思。 –

回答

2

您正在尋找join

當你有一個項目列表,你可以加入他們在一個單一的字符串。

l = ['a', 'b', 'c'] 
print(''.join(l)) 

產生

abc 

您不僅可以使用空字符串,但也是另一個字符串,將被用作分隔

l = ['a', 'b', 'c'] 
print(', '.join(l)) 

現在生產

a, b, c 

在你的例子(f或者例如第一write

MyFile1.write(','.join(MyListAL) + '\n') 

如果您正好有這不是一個字符串列表的東西:

MyFile1.write(','.join(str(x) for x in MyListAL) + '\n') 

(你也可以使用map,但發電機表達式就足夠了)

編輯:添加map

MyFile1.write(','.join(map(str, MyListAL)) + '\n') 
+0

很好的答案。順便說一句,gen expr不需要用括號括起來,就像任何其他表達式一樣:'','.join(myListAL中用於x的str(x))' – Pynchia

+0

這是做我想做的事情謝謝但還有一個問題,它寫在第一行的第一人的信息,然後寫在第二行以及第二人的信息,如果你知道如何幫助我,請回復 – Thy

+0

對於第二個人,你必須申請'MyFile2.write(','。join(str(x)for MyListMZ)')。你甚至已經將一個'\ n'附加到列表中,所以它會被附加到字符串的末尾 – mementum

1

在你的情況下,我寧願使用一個字典列表,其中一個人的所有信息都是一本字典。然後,您可以將其轉換爲JSON字符串,這是用於表示數據的標準格式。 (否則,你需要定義自己的格式,與項目之間的分隔符。)

因此,像這樣:

import json # at the top of your script 

# I would create a function to get the information from a person: 
def get_person_input(): 
    person = {} 
    person["surname"] = input("Surname: ") 
    person["title"] = input("Title: ") 
    person["email"] = input("Email: ") 
    # TODO: do whatever you still want 

    return person 


# Later in the script when you want to write it to a file: 
new_line = json.dumps(person) 

myfile.write(new_line + "\n") 

解析JSON也很容易畢竟:

person = json.loads(current_line) # you can handle exception if you want to make sure, that it is a JSON format 

你可以在你的代碼中使用它來決定在哪個數組中應該寫這樣的東西:

SurName = input("Enter your surname name.") 
if SurName[0] <= 'L': 
    ... 
else: 
    ... 

這將使您的腳本更清晰,更健壯。