質問するログイン新規登録

回答編集履歴

3

修正

2019/07/21 15:20

投稿

Yhaya
Yhaya

スコア439

answer CHANGED
@@ -60,12 +60,8 @@
60
60
  line = re.sub("^\t", "", line) # 先頭のタブは消す
61
61
  cols=line.split("\t")
62
62
  if len (cols)<=1:break
63
- try:
64
- cols=list(map(int,cols))
63
+ cols=list(map(int,cols))
65
- except:
64
+
66
- print("Error: ", cols, f"at line {num}")
67
- print(line)
68
- break
69
65
  result.append(cols)
70
66
  ```
71
67
 

2

解決方法の追加

2019/07/21 15:20

投稿

Yhaya
Yhaya

スコア439

answer CHANGED
@@ -36,4 +36,37 @@
36
36
  Error: ['1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 30
37
37
 
38
38
  ```
39
- 何も入っていない文字(?)が大量に20行目以降に入ってしまっており、これがエラーとなっているようです。
39
+ 何も入っていない文字(?)が大量に20行目以降に入ってしまっており、これがエラーとなっているようです。
40
+
41
+ ## 解決方法
42
+ 何も入っていない文字が量産されていないところは、タブを\tと書くならば
43
+
44
+ ```
45
+ \t\t\t\t\t\t\t\t\t1
46
+ ```
47
+ のようになっている場所だと思います。なので、タブが複数連続している場所は1つにまとめ、先頭のタブは消すという処理をすれば良いと思います。
48
+
49
+ ```python
50
+ import re # 正規表現を使う
51
+
52
+ filename = "maze2.tsv"
53
+ fp=open(filename,"rt",encoding="utf-8")
54
+ tsv= fp.read()
55
+ rows=tsv.split("\n")
56
+ result=[]
57
+
58
+ for num, line in enumerate(rows):
59
+ line = re.sub(r"\t+", "\t", line) # タブが複数あるところは1つに置き換える
60
+ line = re.sub("^\t", "", line) # 先頭のタブは消す
61
+ cols=line.split("\t")
62
+ if len (cols)<=1:break
63
+ try:
64
+ cols=list(map(int,cols))
65
+ except:
66
+ print("Error: ", cols, f"at line {num}")
67
+ print(line)
68
+ break
69
+ result.append(cols)
70
+ ```
71
+
72
+ これで行けるはず。。。

1

エラー箇所の分析を追加

2019/07/21 15:18

投稿

Yhaya
Yhaya

スコア439

answer CHANGED
@@ -1,1 +1,39 @@
1
- `cols=line.split("\t")`の中身に改行文字`\n`とか入ってないですか?このエラーはintに変換できないものが入っていると言っている気がします
1
+ `cols=line.split("\t")`の中身に改行文字`\n`とか入ってないですか?このエラーはintに変換できないものが入っていると言っている気がします.
2
+
3
+ 追記
4
+ どこでエラーが発生しているか確かめるために、つぎのコードを実行しました。
5
+
6
+ ```python
7
+ if __name__ == "__main__":
8
+ filename = "maze2.tsv"
9
+ fp=open(filename,"rt",encoding="utf-8")
10
+ tsv= fp.read()
11
+ rows=tsv.split("\n")
12
+ result=[]
13
+
14
+ for num, line in enumerate(rows):
15
+ cols=line.split("\t")
16
+ if len (cols)<=1:break
17
+ try:
18
+ cols=list(map(int,cols))
19
+ except:
20
+ print("Error: ", cols, f"at line {num}")
21
+ result.append(cols)
22
+ ```
23
+
24
+ その結果がこちらです。
25
+ ```bash
26
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1'] at line 20
27
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1'] at line 21
28
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1'] at line 22
29
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1'] at line 23
30
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1'] at line 24
31
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 25
32
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 26
33
+ Error: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 27
34
+ Error: ['1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 28
35
+ Error: ['1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 29
36
+ Error: ['1', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] at line 30
37
+
38
+ ```
39
+ 何も入っていない文字(?)が大量に20行目以降に入ってしまっており、これがエラーとなっているようです。