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

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

ただいまの
回答率

90.62%

  • Python

    7525questions

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

  • Python 3.x

    5931questions

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

特定位置にある文字列の出現頻度 python

受付中

回答 4

投稿

  • 評価
  • クリップ 1
  • VIEW 1,136
退会済みユーザー

退会済みユーザー

以下のようなテキストファイルがあります.
pythonを用い,'['の直後のIDのみ,出現回数をカウントしたいと考えています.
しかし,3つ目のクォーテーション内にも同じIDが出現している場合があり,
単純な文字列カウントではうまくできません.




['2000056_0000009', 'http://www.・・・', '2000056_0000008', 'http://www.・・・', 'a,href']
['2000056_0000010', 'http://www.・・・', '2000056_0000009', 'http://www.・・・', 'a,href']
['2000056_0000011', 'http://www.・・・', '2000056_0000010', 'http://www.・・・', 'a,href']
['2000070_0000001', 'http://www.・・・', '2203206_0000006', 'http://www2.・・・', 'a,href']
['2000070_0000001', 'http://www.・・・', '2206169_0000002', 'http://www3.・・・', 'a,href']
['2000070_0000001', 'http://www.・・・', '2224105_0000093', 'http://・・・', 'a,href']





具体的には,
['2000056_0000009', 'http://www.・・・', '2000056_0000008', 'http://www.・・・', 'a,href']
['2000056_0000010', 'http://www.・・・', '2000056_0000009', 'http://www.・・・', 'a,href']
太文字の位置にあるIDのみをカウントしたいと考えています.

ご教授お願いいたします.
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

入力の行はJSONじゃないようですね。
とりあえず、
str.split("',")[0].split("['")[1]
これで取れます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/19 00:01

    JSONでは文字列表現はダブルクォートじゃないといけないんですね。他どの辺りがJSONではないですか?行ごとに配列になるので、JSONとしてパースできるのかと思ってました。勉強になります!

    キャンセル

  • 2015/08/19 00:16

    .replace("'", '"')すれば、サンプルで見る限りはJSONになります。
    だからjson.loads(str.replace("'", '"'))[0]でもよいのですが、
    この方法は全体としてJSONにならないとうまくいかないので、
    先頭だけちゃんとしていれば動作する方法を推しました。

    キャンセル

0

全体的な流れとして、下記の流れはいかがでしょうか?

  1.  1行毎にJSONとして読み込む
  2.  配列の最初の要素として読み取る
  3.  dictにIDとカウントの組で結果を格納する

参考: 18.2. json — JSON エンコーダおよびデコーダ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

IDが固定長なら
line[0:17].strip("['")
とか。
可変長なら最初のコンマまで取ってくるのもありです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

 このコードを実行すると cntの中にIDと個数が入ります。
{"'2000056_0000009'": 1,"'2000056_0000010'": 1,"'2000056_0000011'": 1,
 "'2000070_0000001'": 3}

txt = '''['2000056_0000009', 'http://www.・・・', '2000056_0000008', 'http://www.・・・', 'a,href']
['2000056_0000010', 'http://www.・・・', '2000056_0000009', 'http://www.・・・', 'a,href']
['2000056_0000011', 'http://www.・・・', '2000056_0000010', 'http://www.・・・', 'a,href']
['2000070_0000001', 'http://www.・・・', '2203206_0000006', 'http://www2.・・・', 'a,href'] 
['2000070_0000001', 'http://www.・・・', '2206169_0000002', 'http://www3.・・・', 'a,href']
['2000070_0000001', 'http://www.・・・', '2224105_0000093', 'http://・・・', 'a,href']'''

cnt = {}
for line in txt.split('\n'):
    id = line[1:].split(',')[0]
    print id
    try:
        cnt[id] += 1
    except:
        cnt[id] = 1

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    pythonを用いた、xlsxファイルのダウンロード

    web上で毎日取得可能な、http形式のxlsxファイルを自分のPCに、pythonを使ってダウンロードしたいのですが、調べてもわかりません。どなたか教えてください。

  • 解決済

    pythonの関数の見やすい並べ方

    pythonのファイル内にいくつか関数を作っているのですが,その並び方が見にくいというか汚いような気がしています. 例えば以下のように,最初にメインの関数calc_all()があり

  • 解決済

    入力データをうけとり、処理して出力するには?

    stdin 10 20 [300, 400] x, y, z = gets.split(' ').map(&:to_i) print ystdout 20 上記処理をpytho

  • 受付中

    python 文字列カウント

    こちらで質問させていただいた者です. http://teratail.com/questions/13963 不明点があるので,再度ご質問させていただきます. 以下のようなテキ

  • 受付中

    python;複数ファイルを次々に処理

    python3.4を用いて処理を行おうと考えています.環境はwindowsです. かなり初歩的な質問かと思いますが,ご容赦ください. 複数のファイルが同じディレクトリに存在し,そ

  • 解決済

    Jupyter Notebookでのショートカット

    Jupyter Notebookにおける以下の操作でショートカットは使えるんでしょうか? もし可能なら方法をご教授頂けたら幸いです。 使用頻度が高い操作の割にショートカットが見

  • 解決済

    conda menpoとは?

    anacondaでよく出てくる menpo という単語は何を意味しているのですか??ググったのですが要領を得ませんでした……

  • 受付中

    nltkのplotとkeysについて

    nltkで形態素解析をしています その際に文章中によく含まれる単語に分布をみるplotと 頻出単語をリストにするkeys()を用いています plotの分布とkeysで出力し

同じタグがついた質問を見る

  • Python

    7525questions

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

  • Python 3.x

    5931questions

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