質問: tkinter.Button(text='Exec', command=func2) c.place(x=350, y=5) root.mainloop() ```
回答: > > txtファイルへ出力された文字を、行指定しながら上書きしたいのですが、 > > > 行指向のテキストファイルの場合 (**シーケンシャル・アクセス**) * 一時的に別ファイルに全内容を書き出します。(追記) * 指定行までを数えながら毎行読み込んで、~~読み飛ばし~~ 書き出し * 該当行を書き込む * 残りの行を書き込む * 最後にファイルをリネーム という過程が必要になり、 ファイルが大きくなる程、無駄なファイルの入出力も大きくなります。 また、読み書きの時間が長くなるとファイル破損のリスクが大きくなるので、 実際に運用する場合は、(データの重要度次第で)ロックファイルを用いた排他制御等々が必要になってきます。 > > 追記でなく、文字列の変更をしたいとなるとどのような方法があるでしょうか?? > > > データが固定長のバイナリファイルであれば、(**ランダム・アクセス**) 例えば、レコードの最大値を決めておくと、読み出し位置が計算で求まるので * 指定レコード迄をseek()で読み飛ばし * 該当のレコードを上書き のみで済みます。(テキストエディタで開けなくなる等のデメリットは有ります) データが固定長の数値のみの場合は、ファイルサイズを少なく収められる利点有。 但し、コメント等の何文字入力されるかわからない可変長のテキストを含む場合には向いてません。 他の簡易な方法として、書き出すデータが少量なら、readlines()で全ての行を読込んで、 該当行を変更した後にファイル全体を書き出し等でも良いですが、メモリにデータを読み込む為、 データが大きくなると当然占有メモリも大きくなります。 データの規模が大きくなる場合は、sqlite3 等のデータベースの利用がお勧めです。