teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

気になるポイントを追記とos.scandir

2018/03/08 18:00

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -1,3 +1,5 @@
1
+ 質問文で一番気になるポイントはファイル書き出し側の処理が[os.rename](https://docs.python.jp/3/library/os.html#os.rename) windowsなら[os.replace](https://docs.python.jp/3/library/os.html#os.replace)を使ってアトミックにファイルを書き出しているかどうかですが。。。
2
+
1
3
  2案あります。
2
4
 
3
5
  案1,ファイルサイズでソートしてチェック
@@ -5,7 +7,7 @@
5
7
 
6
8
  案2,ファイルの日付を生成してループで回してチェック
7
9
 
8
- 案2のコードのサンプルです。
10
+ 案2のファイルサイズのチェックまでのコードのサンプルです。
9
11
 
10
12
  ```Python
11
13
  # -*- coding: utf-8 -*-
@@ -26,23 +28,26 @@
26
28
 
27
29
 
28
30
  def main() -> None:
31
+ not_founds = []
29
32
  file_sizes = Counter()
30
33
  for dt in date_generator():
31
34
  file_name = f"aaa_{dt.strftime('%Y%m%d%H')}.bin"
32
35
  p = Path(file_name)
33
36
  try:
37
+ st_size = p.stat().st_size
34
- file_sizes[p.stat().st_size] = str(p)
38
+ file_sizes[st_size] = str(p)
35
39
  except FileNotFoundError as ex:
36
- file_sizes[-1] = str(p)
40
+ not_founds.append(str(p))
37
41
  pass
38
42
  # ファイルが存在しない物
39
- if file_sizes[-1]:
43
+ if len(not_founds) >0:
40
- print(file_sizes[-1])
44
+ print(not_founds)
41
- else:
42
- print(file_sizes.most_common(5))
43
45
 
46
+ print(file_sizes.most_common(5))
44
47
 
48
+
45
49
  if __name__ == "__main__":
46
50
  main()
47
51
 
48
- ```
52
+ ```
53
+ Note:[os.scandir](https://docs.python.jp/3/library/os.html#os.scandir)を使う事も検討してみてくださいな。