Как избавиться от квадратных скобок вокруг мероприятия и даты? - PullRequest
0 голосов
/ 18 июня 2020
calendar = []
while True:
    choice = input ("enter a,b,c,d or e")
    if choice == "e":
        print ("you have quitted this program")
        break #to quit the entire program
    if choice == "a":
        newevent = input ("enter the name of an event you want to add")
        y= int(input("enter the year of your event"))
        m = int(input("enter the month of your event"))
        d = int(input("enter the day of your event"))
        h = int(input("enter the hour of your event"))
        mi = int(input("enter the minute of your event"))
        calendar.append ([newevent,y,m,d,h,mi])
        print (calendar)
        f = open("calendar.txt","w")
        f.write (str(calendar)+"\n")
        f.close()



f = open('calendar.txt','r')
st = f.readlines()
print (st)

for i in range (0,len(st)):
    st[i] = st[i].strip("\n")
    print (st)
    f.close()

Это мой результат:

[['swim', 2020, 4, 2, 3, 2]]
["[['swim', 2020, 4, 2, 3, 2]]\n"]
["[['swim', 2020, 4, 2, 3, 2]]"]

Я хочу избавиться от квадратных скобок вокруг моего кода, чтобы он плавал, 2020,4,2,3,2. Обязательно ли открывать файл перед while True?

Ответы [ 3 ]

0 голосов
/ 18 июня 2020

Используйте этот код

import json

calendar = []
while True:
    choice = input ("enter a,b,c,d or e : ")
    if choice == "e":
        print ("you have quitted this program")
        break #to quit the entire program
    if choice == "a":
        newevent = input ("enter the name of an event you want to add : ")
        y= int(input("enter the year of your event : "))
        m = int(input("enter the month of your event : "))
        d = int(input("enter the day of your event : "))
        h = int(input("enter the hour of your event : "))
        mi = int(input("enter the minute of your event : "))
        data = [newevent,y,m,d,h,mi]
        calendar.append(data)

with open("calendar.json","w") as f:
    f.write(f"{json.dumps(calendar)}")

with open('calendar.json','r') as f:
    st = f.read()
    j_data = json.loads(st)

    print(j_data)

0 голосов
/ 18 июня 2020

Hy, так как вы хотите убрать длинные скобки массива. Вы можете использовать функцию полосы. И не забудьте преобразовать ваш массив в строку, если нет. Например:

str1="['a','b']"
str1=str1.strip('[]')
print(str1)

Это даст строку 'a', 'b'. Надеюсь, это поможет вам

0 голосов
/ 18 июня 2020

Для просто с удалением конечных символов используйте:

"[1, 2, 3]"[1:-1]

, который будет делать именно это. Удалите первый символ слева и справа. Но в случае, если вы хотите сохранить текст или что-то еще, с вашей стороны потребуется дополнительная работа для обработки таких особых случаев.

При сохранении вы вызываете f.write (str(calendar)+"\n"), который, если встречает list, делает следующее:

[1, 2, 3]
    |
    v
"[1, 2, 3]"

, если вы хотите преобразовать обратно в список Python, просто используйте ast.literal_eval() в этом через:

from ast import literal_eval
mylist = literal_eval("[1, 2, 3]")
print(type(mylist))
print(mylist[0])

Или вместо простого str(object) используйте лучшую структуру при сохранении в файл, например json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...