回答編集履歴
3
追記
test
CHANGED
@@ -166,6 +166,26 @@
|
|
166
166
|
|
167
167
|
|
168
168
|
|
169
|
+
```Python
|
170
|
+
|
171
|
+
>>> float(' 3.4 ')
|
172
|
+
|
173
|
+
3.4
|
174
|
+
|
175
|
+
>>> float('')
|
176
|
+
|
177
|
+
Traceback (most recent call last):
|
178
|
+
|
179
|
+
File "<stdin>", line 1, in <module>
|
180
|
+
|
181
|
+
ValueError: could not convert string to float:
|
182
|
+
|
183
|
+
>>>
|
184
|
+
|
185
|
+
```
|
186
|
+
|
187
|
+
|
188
|
+
|
169
189
|
---
|
170
190
|
|
171
191
|
そうなると問題は、**末尾のコンマの取り除き方**に切り替わります。
|
2
修正
test
CHANGED
@@ -148,7 +148,7 @@
|
|
148
148
|
|
149
149
|
|
150
150
|
|
151
|
-
結論
|
151
|
+
結論を言うと、**末尾のコンマを除去していないのが原因です。**
|
152
152
|
|
153
153
|
```Python
|
154
154
|
|
1
追記
test
CHANGED
@@ -43,3 +43,193 @@
|
|
43
43
|
|
44
44
|
|
45
45
|
と**『出来ない』**とただ主張されても、解決策が見えないです。
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
追記
|
50
|
+
|
51
|
+
---
|
52
|
+
|
53
|
+
> 1行ならばできるようになったのですが複数行で行おうとするとエラーがでます。
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
色々と情報が不足していますが、問題点に心当たりがあります。
|
58
|
+
|
59
|
+
質問者様のプログラムは、このような構造になっていますね。(ところどころ端折ってます)
|
60
|
+
|
61
|
+
> ```Python
|
62
|
+
|
63
|
+
> with open(filename) as f:
|
64
|
+
|
65
|
+
> for row in f:
|
66
|
+
|
67
|
+
> columns = row.rstrip().split(',')
|
68
|
+
|
69
|
+
> for column in columns:
|
70
|
+
|
71
|
+
> n=float(column)
|
72
|
+
|
73
|
+
> ```
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
期待している通りに値が取り扱われているか、次のように確かめることが出来ます。
|
78
|
+
|
79
|
+
```Python
|
80
|
+
|
81
|
+
with open(filename) as f:
|
82
|
+
|
83
|
+
for row in f:
|
84
|
+
|
85
|
+
print('row', row)
|
86
|
+
|
87
|
+
columns = row.rstrip().split(',')
|
88
|
+
|
89
|
+
print('columns', columns)
|
90
|
+
|
91
|
+
for column in columns:
|
92
|
+
|
93
|
+
print(column)
|
94
|
+
|
95
|
+
n=float(column)
|
96
|
+
|
97
|
+
```
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
ところどころにprint関数を挟んだだけです。俗にprintデバッグと呼びます。
|
102
|
+
|
103
|
+
非常にシンプルな手法ですが、強力な方法です。
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
さて、ひょっとしてcsvファイルは、このような形式ではないですか?
|
108
|
+
|
109
|
+
```
|
110
|
+
|
111
|
+
1.3, 5.3, 5.2,
|
112
|
+
|
113
|
+
3.4, 3.2, 4.1
|
114
|
+
|
115
|
+
```
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
これを読み込んで先ほどのprintデバッグをすると、次のように出力されます。
|
120
|
+
|
121
|
+
```
|
122
|
+
|
123
|
+
row 1.3, 5.3, 5.2,
|
124
|
+
|
125
|
+
columns ['1.3', ' 5.3', ' 5.2', '']
|
126
|
+
|
127
|
+
1.3
|
128
|
+
|
129
|
+
5.3
|
130
|
+
|
131
|
+
5.2
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
Traceback (most recent call last):
|
136
|
+
|
137
|
+
File "testest.py", line 8, in <module>
|
138
|
+
|
139
|
+
n = float(column)
|
140
|
+
|
141
|
+
ValueError: could not convert string to float:
|
142
|
+
|
143
|
+
```
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
`columns`に変なのがまじっていませんか...?
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
結論から言うと、**末尾のコンマを除去していないのが原因です。**
|
152
|
+
|
153
|
+
```Python
|
154
|
+
|
155
|
+
>>> 'a, b, c, d'.split(',')
|
156
|
+
|
157
|
+
['a', ' b', ' c', ' d']
|
158
|
+
|
159
|
+
>>> 'a, b, c, d,'.split(',')
|
160
|
+
|
161
|
+
['a', ' b', ' c', ' d', '']
|
162
|
+
|
163
|
+
>>>
|
164
|
+
|
165
|
+
```
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
---
|
170
|
+
|
171
|
+
そうなると問題は、**末尾のコンマの取り除き方**に切り替わります。
|
172
|
+
|
173
|
+
一般的には、文字列の右端を切り取るのにはスライスを用いることが出来ます。
|
174
|
+
|
175
|
+
```
|
176
|
+
|
177
|
+
>>> 'a, b, c, d,'[:-1]
|
178
|
+
|
179
|
+
'a, b, c, d'
|
180
|
+
|
181
|
+
>>>
|
182
|
+
|
183
|
+
```
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
しかし、この方法は最終行の最後の文字も削ってしまい、ここでは不適です。
|
188
|
+
|
189
|
+
`rstrip`でコンマを除去すると良いでしょう。
|
190
|
+
|
191
|
+
```Python
|
192
|
+
|
193
|
+
>>> 'a, b, c, d,'.rstrip(',')
|
194
|
+
|
195
|
+
'a, b, c, d'
|
196
|
+
|
197
|
+
>>> 'a, b, c, d'.rstrip(',')
|
198
|
+
|
199
|
+
'a, b, c, d'
|
200
|
+
|
201
|
+
>>>
|
202
|
+
|
203
|
+
```
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
これなら上手くいきそうですね。
|
208
|
+
|
209
|
+
|
210
|
+
|
211
|
+
---
|
212
|
+
|
213
|
+
コードに関しましても、マークダウン表記をしていただければ、簡単にレビューします。
|
214
|
+
|
215
|
+
ただ一つだけ先に言っておくと、**インスタンスにlistと名付けるのは絶対に避けてください。**
|
216
|
+
|
217
|
+
```Python
|
218
|
+
|
219
|
+
>>> list('abc')
|
220
|
+
|
221
|
+
['a', 'b', 'c']
|
222
|
+
|
223
|
+
>>> list = []
|
224
|
+
|
225
|
+
>>> list('abc')
|
226
|
+
|
227
|
+
Traceback (most recent call last):
|
228
|
+
|
229
|
+
File "<stdin>", line 1, in <module>
|
230
|
+
|
231
|
+
TypeError: 'list' object is not callable
|
232
|
+
|
233
|
+
>>>
|
234
|
+
|
235
|
+
```
|