回答編集履歴

1

追記

2018/07/08 05:14

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -163,3 +163,31 @@
163
163
  ファイルで管理するなら、`csv`モジュールまたは`json`モジュール
164
164
 
165
165
  頻繁に内容を書き換えるなら、`sqlite`で管理してもいいかと。
166
+
167
+
168
+
169
+ ---
170
+
171
+ ◇余談
172
+
173
+ 以下の書き込み部分でもしも書き込み途中に何らかの障害(PCの電源断,アプリが落とされた,etc)が発生した時にファイルの元データがロストしてしまいます。
174
+
175
+ ```Python
176
+
177
+ with open(file_name, 'w', encoding='utf-8') as score_file:
178
+
179
+ for i, line in enumerate(lines, start=1):
180
+
181
+ if i == line_n:
182
+
183
+ continue
184
+
185
+ score_file.write(line)
186
+
187
+ ```
188
+
189
+ ファイルが不整合な状態を防ぐにはトランザクション機能がある`sqlite`などのデータベースで管理するが一番良いのですが、
190
+
191
+ 別ファイル([tempfile — 一時ファイルやディレクトリの作成](https://docs.python.jp/3/library/tempfile.html))に書き込み、最後に[os.replace](https://docs.python.jp/3/library/os.html#os.replace)で元ファイルにコピーしてくださいな。
192
+
193
+ これで削除処理はロストしますが、ファイルデータのロストはしないです。