質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1024閲覧

リストの変更(replaceがわからない)

SAKUYA02

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/10 07:09

前提・実現したいこと

def changepass():のコードで defAddCustomer():に保存したリストになる、pw(パスワード)の部分だけ更新を行いたいのですが、変更を行うとすべて変わってしまします。何回も変更を試みましたが、うまくいかなかったため、どなたかご教授いただければ幸いです。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python
def AddCustomer():
print("Please register new customer")
user_id = "CUS00" + str(len(open("userinfo.txt", "r").readlines())+1)
user_name = input("\tName: ")
user_birthdate = input("\tBirth Day: ")
user_address= input("\tAddress: ")
user_phonenum = input("\tPhone Number: ")
user_pw = user_name[:3] + user_phonenum[:4]
while True:
Acc_type = input("\tChoice type of acccount(s/c) : ")
if Acc_type == "s":
dep = float(input("How much do you want do deposit (Min :RM100): "))
if dep < 100:
print("Not enough for saving acount")
back = input("Enter 1 to restart and any other key to quiet .....")
if back == "1":
Acc_type = input("\tChoice type of acccount(s/c) : ")
else:
print("Thanks for coming")
break
else:
print("Deposit done successfully")
info = f"{user_id}/{user_pw}/{user_name}/{user_birthdate}/{user_address}/{user_phonenum}/{Acc_type}/{dep}\n"
with open("userinfo.txt", "a") as namefile:
namefile.write(info)
print("Account added succesfully.")
print("User ID and password is:"+ user_id+","+ user_pw+".Please dont forget User ID and password!")
break
elif Acc_type == "c":
dep = float(input("How much do you want do deposit (Min :RM500): "))
if dep < 500:
print("Not enough for current acount")
back = input("Enter 1 to restart and any other key to quiet .....")
if back == "1":
AddCustomer()
else:
print("Thanks for coming")
break
else:
print("Deposit done successfully")
info = f"{user_id}/{user_pw}/{user_name}/{user_birthdate}/{user_address}/{user_phonenum}/{Acc_type}/{dep}\n"
with open("userinfo.txt", "a") as namefile:
namefile.write(info)
print("Account added succesfully.")
print("User ID and password is:" + user_id + "," + user_pw + ".Please dont forget UserID and password!")
ask = input("Press any key to continue....")
break

def changepass(): userid = input('Enter Account ID:') with open('userinfo.txt', 'r') as file1: success = 'no' for rec in file1: reclist = rec.strip().split('/') if reclist[0] == userid: success = 'yes' old_pass = reclist[1] print("Old birthdate is:", reclist[2]) new_pass = input('\nPlease Enter New birthdate: ') reclist[2] = new_pass with open("userinfo.txt", "w") as fh: a = reclist[2] = new_pass fh.write(a) print("Birthdate changed successfully !!!") back = input("Enter 1 to change again or any key to exit....: ") if back == "1": change_info() else: print(" Thanks !!!") else: print("User ID not found !!!") back = input("Enter 1 to restart or any key to exit....: ") if back == "1": change_info() else: print(" Thanks !!!") ### 試したこと ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

with open("userinfo.txt", "w") as fh:
a = reclist[2] = new_pass
fh.write(a)

で書き込んでいるので、ファイルの中身は全て消えてnew_passだけが書き込まれます。

元のファイルを全て読み込み、指定された行だけを書き換えて、全部を書き戻さなければうまくいきません。

そのためには、
csv --- CSV ファイルの読み書き
pandasでcsv/tsvファイル読み込み(read_csv, read_table)pandasでcsvファイルの書き出し・追記(to_csv)を組み合わせて使うことをお勧めします。

投稿2021/12/10 07:21

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SAKUYA02

2021/12/11 03:30

そうだったのですね、、 ご教授ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問