回答編集履歴

3

修正

2020/11/29 02:25

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -20,11 +20,11 @@
20
20
 
21
21
  全体的に整理するならば以下のようになるでしょうか。
22
22
 
23
- ・write_data関数で辞書をリストから引数にしています。.writerowに辞書を渡せば自動的にキーをヘッダと紐付けて書き込めます。
23
+ ・write_data関数で引数をリストから辞書にしています。.writerowに辞書を渡せば自動的にキーをヘッダと紐付けて書き込めます。
24
24
 
25
25
  ・openでmode='a'を指定して、ファイルが存在しない場合は、自動的にファイルが新規作成されます。これで行を減らせます。
26
26
 
27
- ただしヘッダの書き込みをファイルの新規作成時のみに限定する場合は、下記のように既存ファイルの有無をチェックする必要があります。
27
+ ただしヘッダの書き込みをファイルの新規作成時のみに限定する場合は、下記(is_new_file部分)のように既存ファイルの有無をチェックする必要があります。
28
28
 
29
29
 
30
30
 
@@ -71,6 +71,8 @@
71
71
  if is_new_file:
72
72
 
73
73
  writer.writeheader()
74
+
75
+ # 結果をファイルに書き込む
74
76
 
75
77
  writer.writerow(result)
76
78
 
@@ -142,6 +144,8 @@
142
144
 
143
145
 
144
146
 
147
+ # 結果を書き込む
148
+
145
149
  write_data(result)
146
150
 
147
151
 

2

追記

2020/11/29 02:25

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -13,3 +13,143 @@
13
13
  (以下略)
14
14
 
15
15
  ```
16
+
17
+ --------------------------
18
+
19
+
20
+
21
+ 全体的に整理するならば以下のようになるでしょうか。
22
+
23
+ ・write_data関数で辞書をリストから引数にしています。.writerowに辞書を渡せば自動的にキーをヘッダと紐付けて書き込めます。
24
+
25
+ ・openでmode='a'を指定して、ファイルが存在しない場合は、自動的にファイルが新規作成されます。これで行を減らせます。
26
+
27
+ ただしヘッダの書き込みをファイルの新規作成時のみに限定する場合は、下記のように既存ファイルの有無をチェックする必要があります。
28
+
29
+
30
+
31
+ ```
32
+
33
+ import csv
34
+
35
+ import os
36
+
37
+ import datetime
38
+
39
+ import speedtest
40
+
41
+
42
+
43
+ # 計測結果を記述するCSVファイル作成/追記
44
+
45
+ # 引数にDate, Time, Download, Uploadをキーに持つ辞書を受け取る。
46
+
47
+ def write_data(result):
48
+
49
+ f_name = 'SpeedTest.csv'
50
+
51
+
52
+
53
+ # SpeedTest.csvが新規ファイルかどうかを表すフラグ
54
+
55
+ is_new_file = False if os.path.exists(f_name) else True
56
+
57
+
58
+
59
+ # speedTest.csvを作成し、計測結果を記載
60
+
61
+ # ファイルがない場合は新規作成され、ファイルが存在する場合は追記される。
62
+
63
+ with open(f_name, 'a', newline='') as csv_file:
64
+
65
+ # フィールドは、「計測日(YYYY/MM/DD)」「計測実施時間(HH:MM)」「Download速度」「Upload速度」
66
+
67
+ writer = csv.DictWriter(csv_file, fieldnames=result.keys())
68
+
69
+ # SpeedTest.csvが新規ファイルの場合のみ、ヘッダを書き込む
70
+
71
+ if is_new_file:
72
+
73
+ writer.writeheader()
74
+
75
+ writer.writerow(result)
76
+
77
+
78
+
79
+
80
+
81
+ def get_speed_test():
82
+
83
+ servers = [28910, 20976]
84
+
85
+ stest = speedtest.Speedtest()
86
+
87
+ stest.get_servers(servers)
88
+
89
+ stest.get_best_server()
90
+
91
+ return stest
92
+
93
+
94
+
95
+
96
+
97
+ def command_line_runner():
98
+
99
+ # 「計測日(YYYY/MM/DD)」「計測実施時間(HH:MM)」を設定
100
+
101
+ tmp_day = datetime.date.today()
102
+
103
+
104
+
105
+ # 計測日(YYYY/MM/DD)
106
+
107
+ date_str = tmp_day.strftime('%Y/%m/%d')
108
+
109
+
110
+
111
+ # 計測実施時間(HH:MM)
112
+
113
+ time_str = tmp_day.strftime('%H:%M')
114
+
115
+
116
+
117
+ # 速度を計測する。
118
+
119
+ stest = get_speed_test()
120
+
121
+ down_result = stest.download()
122
+
123
+ up_result = stest.upload()
124
+
125
+
126
+
127
+ # 「計測日(YYYY/MM/DD)」「計測実施時間(HH:MM)」「Download速度」「Upload速度」の
128
+
129
+ # 計測結果をresult 変数に格納
130
+
131
+ result = {
132
+
133
+ "Date": date_str,
134
+
135
+ "Time": time_str,
136
+
137
+ "Download": int(down_result / 1024 /1024),
138
+
139
+ "Upload": int(up_result / 1024 /1024)
140
+
141
+ }
142
+
143
+
144
+
145
+ write_data(result)
146
+
147
+
148
+
149
+ print(result)
150
+
151
+
152
+
153
+ command_line_runner()
154
+
155
+ ```

1

2020/11/29 02:17

投稿

sfdust
sfdust

スコア1137

test CHANGED
@@ -1,4 +1,4 @@
1
- get_Speed_File関数でリストを受け取っているのでそれを各変数に分解してください。
1
+ get_Speed_File関数でspeedDataという名前で受け取ったリストを、各変数に分解してください。
2
2
 
3
3
  ```
4
4
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  f_name = 'SpeedTest.csv'
10
10
 
11
- date_str , time_str, mbps_down_result, mbps_up_result = speedData # <=====こを追加
11
+ date_str , time_str, mbps_down_result, mbps_up_result = speedData # <=====この行を追加
12
12
 
13
13
  (以下略)
14
14