json 저장 코드를 2개를 넣으면 꼬입니다.

조회수 740회

Python에서 디스코드 봇을 만들고 있습니다.

임시적으로 json 2개에 데이터를 저장하고 있습니다. 하지만, json 2개를 저장하려 하니, 한 json의 데이터가 다른 json 파일에도 똑같이 저장됩니다.

이유를 모르겠어서 질문해봅니다.

코드 :

@bot.command()
async def 매입(message,money=None):
    await open_account(message.channel.id,message.guild.owner_id)
    users = await get_bank_data()
    await open_user_account(message.author)
    userss = await get_user_data()
    userss[str(message.author.id)]["money"] -= int(money)

    users[str(message.channel.id)]["channel_sy"] = message.author.id
    users[str(message.channel.id)]["channel_m"] = int(money)

    with open('D:/Fishing_Bot/fishuser.json','w') as f:
        json.dump(users,f, indent=2)
     with open('D:/Fishing_Bot/fishmap.json','w') as f:
        json.dump(users,f, indent=2)

# json

async def open_account(chnname,user):
    users = await get_bank_data()

    if str(chnname) in users:
        return False
    else:
        users[str(chnname)] = {}
        users[str(chnname)]["channel_id"] = chnname
        users[str(chnname)]["channel_ji"] = random.choice(ji_roll)
        users[str(chnname)]["channel_ms"] = 0
        users[str(chnname)]["channel_m"] = 10000
        users[str(chnname)]["channel_sy"] = user
        users[str(chnname)]["channel_ssl"] = 3
        users[str(chnname)]["channel_ygb"] = 0


    with open("D:/Fishing_Bot/fishmap.json", "w", encoding='UTF-8') as f:
        users = json.dump(users, f, indent=2)
    return True


async def get_bank_data():
    with open("D:/Fishing_Bot/fishmap.json", encoding='UTF-8') as f:
        users = json.load(f)


    return users

async def open_user_account(user):
    userss = await get_user_data()

    if str(user.id) in userss:
        return False
    else:
        userss[str(user.id)] = {}
        userss[str(user.id)]["money"] = 0


    with open("D:/Fishing_Bot/fishuser.json", "w", encoding='UTF-8') as f:
        users = json.dump(userss, f, indent=2)
    return True


async def get_user_data():
    with open("D:/Fishing_Bot/fishuser.json", encoding='UTF-8') as f:
        userss = json.load(f)


    return userss
  • 파일명을 안 바꾸신 것 아닐까요? 엽토군 2021.9.26 12:13
  • 파일명은 다 바꾼거 같습니다. 알 수 없는 사용자 2021.9.26 12:17
  • 정말요? 코드를 보여주세요. 엽토군 2021.9.26 12:18
  • 질문 수정해서 코드 적어놓았습니다. 알 수 없는 사용자 2021.9.26 12:22
  • json 파일 초기 작성이 잘못된 것 아닌가요? 초보자 2021.9.26 13:12
  • 둘다 각자 사용하는 명령어에서는 문제없이 작동해서, 초기 작성의 문제는 아닌거 같습니다! 알 수 없는 사용자 2021.9.26 14:08
  • 둘 중에 어느 값으로 저장이 되고 있나요? 그리고 파일을 읽는 함수를 호출할 때 await을 쓰는 이유가 있나요? 초보자 2021.9.26 14:23
  • 내용은 지금 원래 fishmap.json 의 값으로 저장되고 있습니다!, 두 번째 질문은 처음 안 방법이 await을 쓰는 방법인데, 이 방법이 제일 편하더라구요 :) 알 수 없는 사용자 2021.9.26 18:50
  • 다시 보니 매입 함수에 문제가 있네요. 왜 둘 다 동일한 변수를 저장하고 있죠? 초보자 2021.9.27 09:11
  • 혹시 어느 부분에서 동일한 변수를 저장하고 있는지 알 수 있을까요? 알 수 없는 사용자 2021.9.27 17:41
  • 매입 함수요. 초보자 2021.9.28 09:42

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)