2016-01-16 4 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, но выражение генератора достаточно)

Edit: добавление map:

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

хорошо ответ.BTW, gen expr не обязательно должен быть заключен в круглые скобки, как и любое другое выражение: '., '.join (str (x) для x в MyListAL)' – Pynchia

+0

Это делает то, что я хочу сделать, спасибо но еще один вопрос: он пишет информацию о первых лицах в первой строке, а затем записывает его во второй строке, а также информацию о других лицах, если вы знаете, как мне помочь в этом, пожалуйста, ответьте – Thy

+0

Для второго человека вы должны подать заявку то же самое понятие MyFile2.write (','. join (str (x) для x в 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: 
    ... 

Это сделает ваш скрипт более понятным и надежным.

Смежные вопросы