新しく質問する

python

役に立った:2件
  • 質問者:dfadsfadad
  • 投稿日時:2009/07/09 03:33
  • 困り度:すぐに回答が欲しいです

for company in lines:
company2= company +"(株)"
print company2
この書き方だと
エイブル
(株)
テーオーシー
(株)
のように改行が入ってしまいます。
これを
エイブル(株)
テーオーシー(株)
としたいのですがどうすればいいでしょうか。
ちなみにcompanyには会社の名前が次々に入っていきます。
また
Yahoo!・ユ・。・、・ハ・鵐ケ - 8872.q
Yahoo!・ユ・。・、・ハ・鵐ケ - 6758.t
から数字の8872や6758を正規表現で抜き出したいのですがどうやって書けばよろしいでしょうか。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:2件)
  • 参考になった:0件
  • 回答者:rinkun
  • 回答日時:2009/07/11 00:55

解釈するのがHTMLなら、正規表現で処理するよりhtmllib等のHTML解析器を使った方が後々修正などし易いと思う。
まあ、最初はちょっと勉強しないといけないでしょうけど。

通報する

この回答へのお礼

ありがとうございます。
ちょっと勉強しなおしてきます。
丁寧な解説をありがとうございました。

  • 参考になった:0件
  • 回答者:rinkun
  • 回答日時:2009/07/10 08:51

ANo.2へのお礼について。
まず、ここの表示では行頭空白が削除されるので、全角空白でも使って書かないとPythonコードは読めないよ。

閑話休題。
行ごとに処理しているコードの中で次の行を読むのは正しく動作できないので止めた方が良い。フラグを立てておいて、繰り返しの初めにフラグチェックして書き出すとか、そういう方法で対応できそうだけど。

通報する

この回答への補足

ちょっと良くわからない質問ですみませんでした。
pythonの練習として
http://charge.biz.yahoo.co.jp/report/sector33/br …
というサイトの
<td align="center" bgcolor="#ffffee"><small>2009ヌッ3キ・/small></td>
<td align="right"><small>803,004</small></td>
<td align="right"><small>1,232</small></td>
<td align="right"><small>11,751</small></td>
<td align="right"><small>-13,506</small></td>
</tr><tr bgcolor="#ffffff">
<td align="center" bgcolor="#ffffee"><small>2008ヌッ3キ・/small></td>
<td align="right"><small>851,205</small></td>
<td align="right"><small>8,480</small></td>
<td align="right"><small>21,227</small></td>
<td align="right"><small>6,754</small></td>
の数値(803,004等)を年代別に抜き出したいのですが
d = urllib.urlopen("http://charge.biz.yahoo.co.jp/report/sector33/br …
txt=d.read()
lines2 = txt.split("\n")
としたのですがこの続きがイマイチわからないのですがどうしたら効率よく抜き出せますか?

この回答へのお礼

いろいろとありがとうございました。
ちょっと自分で十分に考えて見ます。
丁寧に解説をしてくださり誠にありがとうございました。

  • 参考になった:0件
  • 回答者:rinkun
  • 回答日時:2009/07/09 21:00

ANo.1へのお礼に書かれた質問について。
「のような」「それ以外」というのがどんな文字列を想定しているのか分からないのでif条件が書けません。

通報する

この回答へのお礼

少し整理したので見てもらえないでしょうか
for line2 in lines2:
if "あいうえお" in line2:
frag=1
if frag==1:
if "かきくけこ":
            (…)
ここの(…)の部分に現在読み込んでいる行の次の行からprint文で書きだしたいのですが次の行というのはどうやって書けばよろしいでしょうか。

  • 参考になった:0件

No.1ベストアンサー20pt

  • 回答者:rinkun
  • 回答日時:2009/07/09 09:38

Pythonは2.x系しかやってないので、3.x系だと少し違うかもしれません。

質問の場合、companyの文字列の最後に改行が含まれているのでしょう。
> company2= company +"(株)"
の部分を
< company2= company.rstrip() +"(株)"
とすれば、company行末の空白文字(改行を含む)が除去されますので、改行されなくなると思います。
# 行頭の>や<は引用記号です。実際のプログラムには入れないでください

正規表現の方ですが
import re
r=re.compile(".*- (\d+)\..")
としておいて
x = r.match("Yahoo!・ユ・。・、・ハ・鵐ケ - 8872.q")
とすると
x.group(1)で文字列'8872'が取れます。
整数で取りたければint(x.group(1))としてください。

通報する

この回答へのお礼

ありがとうございます。問題解決いたしました。
後1つ質問よろしいでしょうか。
Yahoo!・ユ・。・、・ハ・鵐ケ - 8801.t
Yahoo!・ユ・。・、・ハ・鵐ケ - 8928.o
Yahoo!・ユ・。・、・ハ・鵐ケ - 8999.t
Yahoo!・ユ・。・、・ハ・鵐ケ - 3235.f
のような文字列が現れた場合とそれ以外の文字列が現れた場合で処理を分岐させたいのですが、この場合
if…
else
と書きたいのですが…の部分はどう書けばよろしいでしょうか。
・ユ・。・、・ハ・鵐ケ - の部分は半角です。

  
このQ&Aは役に立ちましたか?(役に立った:2件)

このページのトップへ