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

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

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

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

Q&A

解決済

1回答

324閲覧

python 指定文字(記号)の前の語句を新しいファイルに格納

Alex

総合スコア3

Python

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

2グッド

0クリップ

投稿2022/06/20 05:54

編集2022/06/27 02:14

前提

python初心者です。
自分の勉強不足なのは理解しているので、自分で調べろ勉強しろなどといった答えは控えて頂けると幸いです。

よろしくお願いします。

実現したいこと

今回はpythonのmecabを用い分かち書きしたファイルを読み込み、句点(。や?)の手前の語句を新しいファイルに保存したいです。

具体例:以下のようなファイルを読み込んだ際に、「か」、「です」などを新しいファイルに保存したいというような状況です。

これ から 私 の 自己 紹介 を し て も よろしい でしょう か ? 私 の 名前 は ラッキー セブン です 。 私 は 2007 年 生まれ です 。 身長 は 177 cm 。 体重 は 77 kg 。 趣味 は 以下 の 2 つ です 。 ・ スポーツ 観戦 ・ 映画 鑑賞 以上 で 自己 紹介 を 終わり ます 。 よろしく お 願い ます 。

該当のソースコード

python

1with open("sample.txt", "r") as f: 2 lines = f.read().split(' ') 3 4list_i = [] 5list_r = [] 6 7for i in lines: 8 word = i.split() 9 list_i.append(word) 10 11#print(list_i)

問題点

実際に助言をいただいた通り、ファイルを一つの文字列として読み込み、スペースで区切るところまでは自分で実現することができました。

ただその後の対象の文字を指定し、その1つ前の文字列を別のリストに格納するという部分が実現できずに困っています。

どなたか参考になるソースコードなど記載して頂けると助かります。
図々しいお願いですが、よろしくお願い致します。

aaabbbsss, a22r1345👍を押しています

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

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

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

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

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

quickquip

2022/06/20 06:39

質問が書かれていないようです。
can110

2022/06/20 06:42

実現したいこと(願望)は何となく分かりますが、質問(分からないこと、知りたいこと)自体が書いてませんので記載ください。 「自分では出来ない/やりたくない/出来るように努力もしたくないので、かわりにタダでやってくれる人や手段(コード)を教えてください」ということでしょうか?
guest

回答1

0

ベストアンサー

余計なおせっかいはするなということなので、処理フローを書いてみます。

ファイルを 1つの文字列として読み込みます。
その文字列をスペースで区切って文字列のリスト(i)にします。
回答保存用の空のリスト(r)を作ります。
リスト(i)を先頭から1つずつチェックして、対象の文字であった場合、1つ前の文字列を取り出し、リスト(r)に追加します。
出力用のファイルを開き、リスト(r)の内容を書き込みます。


「リストの先頭から1つずつチェック」というのが わからないとのことですが、提示のコードで、

python

1for i in lines:

「配列linesの内容を1つずつ取り出して処理」というのは使っているのですから、同じことをすればいいだけです。
1つずつ見て、それが、句点や読点であれば処理という感じになるはずです。

「1つ前の文字列」はちょっと難しいかもしれませんね。
上記のループだと「今」のものしか得られません。そこで、1つ前を保持しておく変数(prevとか)を用意しておいて、ループの終りでそれを今の値で更新するのです。 そうすれば、今の値と一つ前の値を得ることができるようになります。

投稿2022/06/20 11:22

編集2022/06/27 02:25
TakaiY

総合スコア12765

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

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

TakaiY

2022/06/26 16:31

質問が編集されたようなので。 「ファイルを一つの文字列として読み込み、スペースで区切るところまでは自分で実現することができました」 のコードはどれでしょう? そして、「リスト(i)を先頭から1つずつチェックして、~」がわからないということですか?
Alex

2022/06/27 02:13

該当のソースコードの欄に追加させて頂きました。 質問や問題点がわかりにくくて申し訳ございません。 ご指摘いただいた通りでございます。 リスト(i)を先頭から1つずつチェックする方法、指定した対象文字が出現した際にその1つ前の文字列を取り出す方法がわかりません。 よろしくお願い致します。
TakaiY

2022/06/27 02:25

回答更新しました。
Alex

2022/06/30 02:52

回答の更新ありがとうございます。 その後自分で試行錯誤した結果なんとか、実現することができました。 細かく毎回処理フローを丁寧に教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問