回答編集履歴

2

コメントを修正

2022/09/27 13:48

投稿

tatsu99
tatsu99

スコア5438

test CHANGED
@@ -1,7 +1,7 @@
1
1
  最初にCSVファイルを全件読み込み、値がnoneのレコードのみをリストに取り込み、そのリストを検索するようにしました。不明点があれば補足してください。
2
2
  テストテータのパターンが少ないので、問題があるかもしれません。
3
3
  (1ユーザーが出力対象となるケース、2ユーザーが出力対象となるケースのみ試験しています)
4
- 50万件の(全レコードがnone)のデータで、10程度でしたので、処理速度は問題ないかと思います。
4
+ 50万件の(全レコードがnone)のデータで、10程度でしたので、処理速度は問題ないかと思います。
5
5
  ```python3
6
6
  import csv
7
7
  from datetime import datetime,timedelta

1

ソースが欠落していたので、再掲載しました。

2022/09/27 13:46

投稿

tatsu99
tatsu99

スコア5438

test CHANGED
@@ -3,6 +3,48 @@
3
3
  (1ユーザーが出力対象となるケース、2ユーザーが出力対象となるケースのみ試験しています)
4
4
  50万件の(全レコードがnone)のデータで、10程度でしたので、処理速度は問題ないかと思います。
5
5
  ```python3
6
+ import csv
7
+ from datetime import datetime,timedelta
8
+
9
+ #global変数の設定
10
+ # noneのレコードのみのリスト
11
+ non_array = [] # 0:date 1:=user 2:datetime,3:flag(True/Flase)
12
+ # 出力レコードのリスト
13
+ out_array = [] # 0:date 1:user
14
+
15
+ # CSVファイルのパス設定
16
+ source_file_path = "hoge.csv"
17
+ result_file_path = "result.csv"
18
+
19
+ # CSV読み込み
20
+ def load_csv(filename, encoding="utf-8"):
21
+ global non_array
22
+ with open(filename, encoding=encoding) as input_file:
23
+ reader = csv.reader(input_file)
24
+ #ヘッダはスキップ
25
+ header = next(input_file)
26
+ for date,user,atai in reader:
27
+ # noneのデータのみ格納
28
+ # date,user,dateのdatetime型,True をnon_arrayへ登録
29
+ if atai == 'none':
30
+ wdate =datetime.strptime(date,"%Y/%m/%d %H:%M:%S")
31
+ non_array.append([date,user,wdate,True])
32
+
33
+ # CSV保存
34
+ def save_csv(filename,newline=""):
35
+ global out_array
36
+ with open(filename, "w", newline=newline) as output_file:
37
+ csv_writer = csv.writer(output_file)
38
+ csv_writer.writerows(out_array)
39
+
40
+ # sx~最後までnon_arrayを検索する
41
+ # 但しendtimeを超えた場合は打ち切る
42
+ def process_2(sx,user,endtime):
43
+ global non_array
44
+ count = 0
45
+ #検索にマッチしたレコード番号のリスト
46
+ outix = []
47
+ for i in range(sx,len(non_array)):
6
48
  #時刻がendtimeを超えた場合は終了
7
49
  if non_array[i][2] > endtime:
8
50
  break