• 締切済み

pythonについて質問です。

2つのテキストファイルを読み込み、以下の処理を行い新しいテキストファイル(csv)に書き込みたいのですがわかる方いましたら教えてください。 (処理内容) test1.txtにしか無いキーの場合、値を2倍 test2.txtにしか無いキーの場合、値を10倍 test1とtest2の同一のキーが有る場合、値を足して4倍にする。 [test1.txt] key 値 10 1000 20 2000 30 3000 40 4000 [test2.txt] key 値 1 10 10 100 17 170 30 300 40 400 【理想結果】 key 値 1 100 10 4400 17 1700 20 4000 30 13200 40 17600 [ソース] def read2dic(p,d): ・with open(p,"r") as f: ・・for l in f: ・・・s=l.replace("\n","").split("") ・・・d[s[0]]=int(s[1]) a={} b={} read2dic("test1.txt",a) read2dic("test2.txt",b) bkeys=b.keys() for k,v in a.items(): ・if k in bkeys: ・・bv=b[k] ・・del b[k] ・・a[k]=(v+bv)*4 ・else: ・・a[k]=v*2 for k,v in b.items(): ・a[k]=v*10

noname#237123
noname#237123
  • Python
  • 回答数3
  • ありがとう数1

みんなの回答

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.3

最後に c=sorted(a.items()) for k,v in c: print(k,v) を追加してください。

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.2

中身確認しました。 理想結果にするにはソートの処理が出来ていませんね。

noname#237123
質問者

お礼

わかりました。 理想結果のように辞書からcsvに書き込むことは可能でしょうか?

  • maiko04
  • ベストアンサー率17% (345/1956)
回答No.1

s=l.replace("\n","").split("")  を s=l.replace("\n","").split(" ")  にしたら正常終了しました。 中身は見ていません。

関連するQ&A

  • pythonについて質問です。

    2つのテキストファイルを読み込み、以下の処理を行い新しいテキストファイルに書き込みたいのですがどう組んでいいか分かりません、わかる方いましたら教えてください。 (処理内容) test1.txtにしか無いキーの場合、値を2倍 test2.txtにしか無いキーの場合、値を10倍 test1とtest2の同一のキーが有る場合、値を足して4倍にする。 [test1.txt] key 値 10 1000 20 2000 30 3000 40 4000 [test2.txt] key 値 1 10 10 100 17 170 30 300 40 400 【理想結果】 key 値 1 100 10 4400 17 1700 20 4000 30 13200 40 17600 お手数ですが、宜しくおねがいします。

  • python

    pythonについての質問です。 def S_sa(k=1) for step in xrange(k) : if step == 0 : print 'a' else print 'b' というコードがあって、なぜかprint aが実行されるのはなぜでしょうか? xrangeのreturnは1ではないのでしょうか?

  • Pythonでsplit()が効きません…

    ローカルに保存したtxtファイルから文字列を読み込んで、その文字列をsplit()したいのですが何故だか出来ません。 何が原因と考えられるか、教えてください。 >>>f = open('./local.txt', 'w') >>>f.write('1234@5678') >>>f.close() >>>f = open('./local.txt', 'r') >>>print f.read() 1234@5678 >>>a = f.read().split('@')[0] >>> print a >>>b = f.read().split('@')[1] IndexError: list index out of range ※ print a の出力結果は空でした。 f.read().encode('utf-8').split('@')も同様の結果となりました。

  • Python3

    Python3で辞書のループ処理をしています。 以下のコード users = {"yama":200, "kama":300, "att":500} for key, value in users.items(): print("key: %s value: %d" % (key, value)) を実行すると key: att value: 500 key: kama value: 300 key: yama value: 200 key: att value: 500 key: kama value: 300 key: yama value: 200 上記のような結果になってしまいます。 1セットだけ表示させたいのになぜ2セットの表示になってしまうのでしょうか? 教えてください。よろしくお願いします。

  • DictionaryオブジェクトのItemの型は?

    このコードの○○○には何を書けばよいのでしょうか?  (下から2行目です) コードの間は適当に省略しています。 Sub test() Set Dic = CreateObject("Scripting.Dictionary") Items = Dic.Items   j = Func2(Items(k)) End Sub Function Func2(a As ○○○) End Function

  • VBAのdictionaryでAddの使い方

    VBAでつぎのコードを実行すると、a,A1.1の後、a,A2.2と表示します。 dicには、a,A2.2の設定をしていないのになぜこうなるのでしょうか? どなたか教えてください。 Sub sample() Dim dic As Object Dim subDic As Object Set dic = CreateObject("Scripting.Dictionary") Set subDic = CreateObject("Scripting.Dictionary") subDic.Add "A1", 1 dic.Add "a", subDic subDic.Add "A2", 2 '結果表示 Dim key1 As Variant Dim key2 As Variant For Each key1 In dic.keys For Each key2 In dic(key1).keys MsgBox key1 & "," & key2 & ". " & dic(key1)(key2) Next Next End Sub

  • FOR文内でサブルーチンをCALLした際の、ERRORLEVELの取得

    ファイルをコピーしてからFOR文により6回処理を繰り返すような バッチファイルを作成しようと思っています。 そのFOR文内でコールしたサブルーチンのERRORLEVELがうまく取得できません。ファイルコピーをしなければ値が取得できるのですが。。。 何が 原因なのか皆目見当つかずで行き詰ってしまいました。 どなたか 教えてください。 宜しく御願いします。 @echo off copy test.txt test.txt.bak for /L %%A in (0,1,5) do ( call :test echo 戻り値:%ERRORLEVEL% ) :test exit /b 99

  • Pythonファイル読み書きについて

    ファイル読み書きで躓いています。 やりたい事は、以下の5行のa.txtを読んで、b.txtに吐き出します。 a.txt  1First Row  2Second Row  3行目  (4)         ※4が○で囲まれてるやつ  5行目 以下コードです。 import codecs fin = codecs.open(r'D:\Work\a.txt', 'r', 'shift-jis') fout = codecs.open(r'D:\Work\b.txt', 'w', 'shift-jis') for line in fin: print line fout.write(line) fin.close() fout.close() 4行目でエラーとなります。 これを正常動作させる事はできるのでしょうか? よろしくお願いします。

  • [python] 関数から配列を戻すには?

    グローバル変数(配列)の値を変えたいと思います。 ------------- line = [] def tmp_read(self, *out_line): f = open('tmp.txt') lines2 = f.readlines() # 1行毎にファイル終端まで全て読む(改行文字も含まれる) f.close() # lines2: リスト。要素は1行の文字列データ for line in lines2: print line, print *out_line = lines2 return *out_line tmp_read(self, *line) print line     ← 配列Lineの内容を確認する ------------- この「line」には、文字列を含む配列を入れる予定です。 lines2で得られた値を、戻せば出来そうな気もしますが巧くいきません。 どのように修正すれば酔いか、教えて頂けませんか。

  • pythonでスクレイピングがうまく出来ません

    python2.7でbeautifulsoupを用いて、netkeiba.comから競馬情報(騎手の成績)をスクレイピングしています。 定法に基づきまして、『検証』からページのツリー構造を把握して、プログラムを作成しました。 馬名部分の構造が<td class="txt_l"> <a href="/horse/2011105901">テンテマリ</a></td> #テンテマリは馬名 となっておりましたので、"txt_l"を拾い出せるようにスクリプトを作りました。 しかしながら、 馬名以外の"txt_l"は全部スクレイピング出来るのですが、馬名部分だけがNoneと返ってまいります。 エラーメッセージではありませんが、何が原因でNoneとなるのかが、どうしても分かりません。 ちなみに、馬名以外で、ほぼ同様の構造を持つ、『レース名』、構造は <td class="bml txt_l"> <a href="/race/201603020812/" title="3歳上500万円下">3歳上500万円下</a> (3歳上500万円下はレース名) では、問題なくレース名を拾うことが出来ました。 該当のソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange( 1, 2 ): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'}) for tr1 in lrg1: print tr1.string 試したこと 馬名以外の('td',{'class':'txt_l'})に準ずる『レース名』は、うまく拾うことが出来ました。 lrg1 = tr.findAll('td',{'class':'txt_l'}) で馬名を得ることが出来ない理由、併せて馬名を拾えるスクリプトを御教示くださいますよう、よろしくお願いいたします!