質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1210閲覧

pythonで””で囲まれているデータが記述されているtxtファイルを読み込みたい

kai_programing

総合スコア3

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/07/16 07:45

前提・実現したいこと

python3で

"2018/ 9/29 19:27:28","01","123456789B","00","0B","1235","362F","10E2","223E"," 000","80","00"," 000"," 000"," 000"," 000"," 000"
"2018/ 9/29 19:27:28","02","123456789A","00","0A","1234","362E","10E1","223D"," 000","80","00"," 000"," 000"," 000"," 000"," 000"
"2018/ 9/29 19:27:28","03","123456789B","00","0B","1235","362F","10E2","223E"," 000","80","00"," 000"," 000"," 000"," 000"," 000"

と書かれているようなtxtファイルを読み込みんで "0B"や"0A"の後ろ4列だけを抽出したいのですが
下記のようなエラーメッセージが出ます。
過去に数字だけが書かれているtxtファイルは読み込んだことがあるのですが、”や/が使われているデータは読んだことがありません。
どなたかご教授いただければ幸いです。

発生している問題・エラーメッセージ

UnicodeDecodeError Traceback (most recent call last) <ipython-input-1-146f274a0966> in <module> 1 import numpy as np 2 ----> 3 xp, xm, yp, ym = np.genfromtxt("pppet.txt",skip_header=1,usecols=[7,8,9,10], delimiter=",",unpack=True) 4 print(xp,xm,yp,ym) ~/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/npyio.py in genfromtxt(fname, dtype, comments, delimiter, skip_header, skip_footer, converters, missing_values, filling_values, usecols, names, excludelist, deletechars, replace_space, autostrip, case_sensitive, defaultfmt, unpack, usemask, loose, invalid_raise, max_rows, encoding) 1792 try: 1793 for i in range(skip_header): -> 1794 next(fhd) 1795 1796 # Keep on until we find the first valid values ~/opt/anaconda3/lib/python3.7/codecs.py in decode(self, input, final) 320 # decode input (taking the buffer into account) 321 data = self.buffer + input --> 322 (result, consumed) = self._buffer_decode(data, self.errors, final) 323 # keep undecoded input until the next call 324 self.buffer = data[consumed:] UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8e in position 0: invalid start byte

該当のソースコード

1行目にはデータが何か日本語で記述されているので飛ばして読み込んでいます。

python3

1import numpy as np 2 3xp, xm, yp, ym = np.genfromtxt("pppet.txt",skip_header=1,usecols=[7,8,9,10], delimiter=",",unpack=True) 4print(xp,xm,yp,ym)

試したこと

上述の通りです。

補足情報(FW/ツールのバージョンなど)

jupyter notebook で書いてます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pandasを使った方が柔軟に読み込めて便利かと思います。

Python

1import pandas as pd 2from io import StringIO 3 4# テストデータ。pppet.txtの代わり 5s = """ 6"2018/ 9/29 19:27:28","01","123456789B","00","0B","1235","362F","10E2","223E"," 000","80","00"," 000"," 000"," 000"," 000"," 000" 7"2018/ 9/29 19:27:28","02","123456789A","00","0A","1234","362E","10E1","223D"," 000","80","00"," 000"," 000"," 000"," 000"," 000" 8"2018/ 9/29 19:27:28","03","123456789B","00","0B","1235","362F","10E2","223E"," 000","80","00"," 000"," 000"," 000"," 000"," 000" 9""" 10 11# 型は自動で判別して読込。「10E2」は「10e2」→「10^2」→「100」として取り込まれる 12df = pd.read_csv(StringIO(s), header=None, usecols=[7,8,9,10]) 13xp, xm, yp, ym = df.to_numpy().T 14print(xp,xm,yp,ym) 15# [1000.0 100.0 1000.0] ['223E' '223D' '223E'] [0 0 0] [80 80 80] 16 17# 型は文字列として読込。「10E2」はそのまま 18df = pd.read_csv(StringIO(s), header=None, usecols=[7,8,9,10], dtype=str) 19xp, xm, yp, ym = df.to_numpy().T 20print(xp,xm,yp,ym) 21#['10E2' '10E1' '10E2'] ['223E' '223D' '223E'] [' 000' ' 000' ' 000'] ['80' '80' '80']

投稿2020/07/16 08:02

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kai_programing

2020/07/16 08:14

pandasを使うという選択肢がなかったので、非常に参考になりました。 そもそもusecolsで指定した列が違うという問題点にも気づくことができました。 非常に丁寧な回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問