回答編集履歴

2

成形

2017/09/07 09:16

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,5 @@
1
+ **いきなり結論**
2
+
1
3
  最初に、どのように書き換えればよいか書いてしまおうと思います。
2
4
 
3
5
  ```Python
@@ -8,7 +10,9 @@
8
10
 
9
11
  >>> row = row.replace('.000000000Z', '')
10
12
 
11
- >>> datetime.strptime(row,'%Y-%m-%d %H:%M:%S')
13
+ >>> my_date = datetime.strptime(row,'%Y-%m-%d %H:%M:%S')
14
+
15
+ >>> my_date
12
16
 
13
17
  datetime.datetime(2007, 1, 3, 13, 0)
14
18
 
@@ -18,11 +22,15 @@
18
22
 
19
23
  ---
20
24
 
25
+ **修正の過程**
26
+
21
- 上手くいかない原因は、まずreplaceの返り値を受け取っていないことです。
27
+ 上手くいかない原因の第一は、replaceの返り値を受け取っていないことです。
22
28
 
23
29
  文字列はイミュータブルなので、メソッドを噛ませても変化しません。
24
30
 
25
31
  ```Python
32
+
33
+ # 今までの方法
26
34
 
27
35
  >>> row = '2007-01-03T13:00:00.000000000Z'
28
36
 
@@ -33,6 +41,10 @@
33
41
  >>> row
34
42
 
35
43
  '2007-01-03T13:00:00.000000000Z'
44
+
45
+
46
+
47
+ # 返り値を受け取ると
36
48
 
37
49
  >>> row = row.replace('T', '')
38
50
 
@@ -70,6 +82,10 @@
70
82
 
71
83
  ValueError: time data '2007-01-0313:00:00' does not match format '%Y-%m-%d %H:%M:%S'
72
84
 
85
+
86
+
87
+ # 上手くいかないのでrowを確認してみる
88
+
73
89
  >>> row
74
90
 
75
91
  '2007-01-0313:00:00'
@@ -80,4 +96,24 @@
80
96
 
81
97
  rowを出力してみると、dayとhourの数値が隣接してしまっていることがわかります。
82
98
 
83
- よって、冒頭書いた通りTを空白に置える必要があり
99
+ よって、Tから空文字列置換するのではなく、空白に置換しょう
100
+
101
+
102
+
103
+ 以下、冒頭のコードを再掲したものです。
104
+
105
+ ```Python
106
+
107
+ >>> row = '2007-01-03T13:00:00.000000000Z'
108
+
109
+ >>> row = row.replace('T', ' ')
110
+
111
+ >>> row = row.replace('.000000000Z', '')
112
+
113
+ >>> my_date = datetime.strptime(row,'%Y-%m-%d %H:%M:%S')
114
+
115
+ >>> my_date
116
+
117
+ datetime.datetime(2007, 1, 3, 13, 0)
118
+
119
+ ```

1

追記

2017/09/07 09:16

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,5 @@
1
+ 最初に、どのように書き換えればよいか書いてしまおうと思います。
2
+
1
3
  ```Python
2
4
 
3
5
  >>> row = '2007-01-03T13:00:00.000000000Z'
@@ -11,3 +13,71 @@
11
13
  datetime.datetime(2007, 1, 3, 13, 0)
12
14
 
13
15
  ```
16
+
17
+
18
+
19
+ ---
20
+
21
+ 上手くいかない原因は、まずreplaceの返り値を受け取っていないことです。
22
+
23
+ 文字列はイミュータブルなので、メソッドを噛ませても変化しません。
24
+
25
+ ```Python
26
+
27
+ >>> row = '2007-01-03T13:00:00.000000000Z'
28
+
29
+ >>> row.replace('T', '')
30
+
31
+ '2007-01-0313:00:00.000000000Z'
32
+
33
+ >>> row
34
+
35
+ '2007-01-03T13:00:00.000000000Z'
36
+
37
+ >>> row = row.replace('T', '')
38
+
39
+ >>> row
40
+
41
+ '2007-01-0313:00:00.000000000Z'
42
+
43
+ ```
44
+
45
+
46
+
47
+ これを踏まえてコードを書き換えても、まだエラーが出ます。
48
+
49
+ ```Python
50
+
51
+ >>> row = '2007-01-03T13:00:00.000000000Z'
52
+
53
+ >>> row = row.replace('T', '')
54
+
55
+ >>> row = row.replace('.000000000Z', '')
56
+
57
+ >>> datetime.strptime(row,'%Y-%m-%d %H:%M:%S')
58
+
59
+ Traceback (most recent call last):
60
+
61
+ File "<stdin>", line 1, in <module>
62
+
63
+ File "C:\ProgramData\Miniconda3\lib\_strptime.py", line 565, in _strptime_datetime
64
+
65
+ tt, fraction = _strptime(data_string, format)
66
+
67
+ File "C:\ProgramData\Miniconda3\lib\_strptime.py", line 362, in _strptime
68
+
69
+ (data_string, format))
70
+
71
+ ValueError: time data '2007-01-0313:00:00' does not match format '%Y-%m-%d %H:%M:%S'
72
+
73
+ >>> row
74
+
75
+ '2007-01-0313:00:00'
76
+
77
+ ```
78
+
79
+
80
+
81
+ rowを出力してみると、dayとhourの数値が隣接してしまっていることがわかります。
82
+
83
+ よって、冒頭に書いた通り、Tを空白に置き換える必要があります。