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

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

新規登録して質問してみよう
ただいま回答率
85.48%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

817閲覧

バイナリーファイルを文字列での読み込み

YutaNakada

総合スコア5

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/05/05 08:20

バイナリーファイルをバイト型から文字列に変換したい

pythonでwith open()を使ってバイナリーファイルを読み込んで、文字列に変換したいです。
その後正規表現を使い必要な物を抽出して、print文で出力をしたいと思っています。

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

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa4 in position 10: invalid start byte

該当のソースコード

python

1path1='geo_coordinates_mappingbased_en.ttl.bz2' 2with open(path1,"rb") as f1: 3 4 lines=f1.readlines() 5 for line in lines: 6 l=line.decode("utf-8") 7 print(l) 8

試したこと

path1のバイナリファイルをlinuxコマンド:lv で文字列として読むことはできます。

path1='geo_coordinates_mappingbased_en.ttl.bz2' with open(path1,"rb") as f1: lines=f1.readlines() for line in lines: print(line) 出力結果 b'\xb2\x0c \xa4\x10\xa8 !\n' b'\xa4\x08T \x98a`\xc3\x0c\x13)\x81\xa9\x95\x06\x8b*\xdeR\xad\x94\xaa\xae"2\xd2I\xab+)J\xb5\xff\x8aUuZk@4\xa8`\xab\x05\x83\x0b\x05\x80\xc3\x0c\x18}\xe6\x95\\x03[\xd5*\xba\xb4\xab*V\x94\xa8@T!\x08B\x14\x84*\x14\x82\xa1HB\x14\x85\x96,\x82\xa0\x82\xaa\x08!\x84\xb0\xc3\x0c0\xc0\xbf\xc5ET\xc0i\x8cD\x86\x10\xaaYPB\x08@B\x0b\x19-\x18\xcc\xcc\x16\x16\x10\xfeZ*\xa6\r\x0c\n' b'\xa5P\x88-\xb3UI&\xb6T\xa8aeX\x81P\x91\x12H!\x02\xa1\x0c0\xc3\n'

そのまま読み込むとこのようになります。
初投稿でありpythonに不慣れで至らない点がございますが、どうかよろしくおねがします。

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

python3,mac

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

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

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

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

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

meg_

2020/05/05 08:34

'geo_coordinates_mappingbased_en.ttl.bz2'は圧縮ファイルですよね? そのまま文字列には変換できないのでは?
YutaNakada

2020/05/05 10:58

おっしゃる通りでした。 teamikiさんの方法で実行したらできました。 回答ありがとうございます!
guest

回答1

0

ベストアンサー

ファイル名からの推測ですが、bz2ファイル なら 標準ライブラリにbzip2 圧縮のサポート があるので

python

1 2import bz2 3 4path1='geo_coordinates_mappingbased_en.ttl.bz2' 5 6with bz2.open(path1, "rb") as f1: 7 for line in f1: 8 print(line)

投稿2020/05/05 09:05

編集2020/05/05 11:44
teamikl

総合スコア8664

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

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

YutaNakada

2020/05/05 11:01

teamiklさんありがとうございます! 圧縮ファイルのことを全く知らなかったので大変助かりました。 こんなにも親切かつスピーディに回答していただき大変助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問