回答編集履歴
2
コメントを修正
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
ソースが欠落していたので、再掲載しました。
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
|