回答編集履歴

1

追記

2020/07/08 12:22

投稿

8524ba23
8524ba23

スコア38341

test CHANGED
@@ -1,5 +1,69 @@
1
1
  `UnicodeDecodeError: 'shift_jis' codec can't decode byte 0xff in position 0: illegal multibyte sequence`より[BOM](https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF)付きのファイルのようです。
2
2
 
3
- 先頭が`0xFF`なので`codecs.open(`で`codecs.BOM_UTF16_LE`または`codecs.BOM_UTF32_LE`を指定してみてください。
3
+ 先頭が`0xFF`なので~~`codecs.open(`で`codecs.BOM_UTF16_LE`または`codecs.BOM_UTF32_LE`を指定してみてください。~~
4
4
 
5
+ 面倒くさいですが以下のようなコードで`str`型に変換したうえで読み込んでください。
6
+
7
+ 参考:
8
+
5
- 参考:[codecs --- codec レジストリと基底クラス](https://docs.python.org/ja/3/library/codecs.html#module-codecs)
9
+ [codecs --- codec レジストリと基底クラス](https://docs.python.org/ja/3/library/codecs.html#module-codecs)
10
+
11
+ [Python - Decode UTF-16 file with BOM](https://stackoverflow.com/questions/22459020/python-decode-utf-16-file-with-bom)
12
+
13
+ ```Python
14
+
15
+ import codecs
16
+
17
+ from io import StringIO
18
+
19
+ import pandas as pd
20
+
21
+
22
+
23
+ # バイナリで読込、BOMを除去して「UTF-16LE」としてデコード
24
+
25
+ with open('VC.csv', 'rb') as f:
26
+
27
+ data = f.read()
28
+
29
+ text = data[len(codecs.BOM_UTF16_LE):].decode('utf-16le')
30
+
31
+
32
+
33
+ print(text)
34
+
35
+ #id,str
36
+
37
+ #1,あいう
38
+
39
+ #2,かきく
40
+
41
+
42
+
43
+ # str型からストリームオブジェクトを作成して読込
44
+
45
+ df = pd.read_csv(StringIO(text))
46
+
47
+ print(df)
48
+
49
+ # id str
50
+
51
+ #0 1 あいう
52
+
53
+ #1 2 かきく
54
+
55
+ ```
56
+
57
+
58
+
59
+ VC.csv( UTF-16LE with BOM)
60
+
61
+ ```PlainText
62
+
63
+ id,str
64
+
65
+ 1,あいう
66
+
67
+ 2,かきく
68
+
69
+ ```