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

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

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

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

Q&A

1回答

973閲覧

python テキストから特定単語を抜き出す

taxtuki

総合スコア5

Python

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

0グッド

1クリップ

投稿2019/10/29 21:04

.txtの中にあるteniohalistの特定単語から前3文字を抜き出し、テキストに保存するプログラムを組もうとしています。

TypeError: a bytes-like object is required, not 'tuple'
とエラー文がでてきてどうしたらいいのか全く分からないので教えてください。

import sys tenioha = set( list( filter(lambda x:x!="", """が,の,を,に,へ,と,で,や,の,に,と,や,か,は,も,ば,と,が,し,て,か,な,ぞ,わ,よ""".split(',') ) ) ) print(tenioha) dataset = [] with open('wikiwakati.txt', 'r') as f: for fi, line in enumerate(f): if fi > 10000:break terms = line.split() for cur in range(3, len(terms) - 3, 1): if terms[cur] in tenioha: try:        head = list(terms[cur-4:cur])        ans = terms[cur]        dataset.append((head,ans,) ) except KeyError as e: pass print("all data set is %d"%len(dataset)) with open('output.txt', 'wb')as f: f.writelines(dataset)

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

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

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

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

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

matobaa

2019/10/29 21:57

エラーには重要な情報がたくさん含まれています。細部まで読むと答えがあるはず。 可能なら前後を含めたエラー出力全部を質問文に貼り付けてください。
tanishi_a

2019/10/30 00:41 編集

・入力 (wikiwakati.txt) の内容も載ってると再現確認できるのですが ・出力 (output.txt) で出てくることを期待する内容も載っていると、合っているかの確認がしやすいです ・コードに全角空白が入ってますよ ・どの行でエラーとか出ないのでしょうか?
guest

回答1

0

エラーの原因は

Python

1with open('output.txt', 'wb')as f: 2 f.writelines(dataset)

の部分で、バイナリーモード('wb')でファイルをopen()しているにも関わらず、f.writelines()にて タプル型のデータのリストを渡しているのが原因です。

どのようなデータ形式でファイルを作成したいのか不明なのですが、、

データをバイナリーデータにて格納したいのであれば、pickleを使ってシリアライズを行い

Python

1import pickle 2 3with open('output.txt', 'wb')as f: 4 pickle.dump(dataset,f)

のように書き込むとよいのではないでしょうか。

ただこの場合拡張子が.txt で良いのか?とは思いますが。

そうではなくデータをテキストデータで格納するのであれば、open()のオプションから "b"を外した上で、writelines()でリストを渡すのを諦めて、ループにて1行づつ

Python

1with open('output.txt', 'w') as f: 2 for d in dataset: 3 f.write(f'{d}\n')

とすると一応ファイルにデータを書けます。

ファイルのデータの形式がこれで良いのかは全く不明ですが。。。

投稿2019/10/30 00:00

magichan

総合スコア15898

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

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

tanishi_a

2019/10/30 00:39

本筋でないコメントで申し訳ないのですが、、 コメントとして使われているのだと思うのですが、 引用記号 `>` を使っていると、質問者のコメントを引用しているように見えてしまいます。。
magichan

2019/10/30 02:06

『補足コメント』として使ってます。マークダウンの用途としては"引用"なのでたしかにそうですね。まあ文脈で判断できると思いますので気にしないでくだし。
taxtuki

2019/10/30 02:25

ありがとうございます。下記のfor文回す方法でtxtファイルに書き込むことができました。
taxtuki

2019/10/30 02:27

追加で質問さしていただきたいのですが outputしたファイルの中身が (['(&、', '英語名', ':)'], 'と') と出てきます []はリスト型として ()このかっこはどこから来てるのか、またどうやったら外せるのか教えていただきたいのですが
magichan

2019/10/30 02:42

書き込まれるデータは dataset.append((head,ans,) ) にてリストに追加されているtuple型のデータなので、tuple型を示す括弧が付きます。 これを外したいのであれば for文でunpackして for head, ans in dataset: __f.write(f'{head}, {ans}\n') のように、headとansをバラバラにファイルに書き込めばよいのではないでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問