• 締切済み

pythonの固定長の集計について

python3.0を使ってテキストデータ(固定長)に関する集計方法の質問です。 テキストデータ(data.txt)の中身は以下となっております。 01010500 01020150 01021000 02011000 02010600 02020300 データレイアウトはは以下となっております。 最初の2文字(1~2カラム):売り手の番号 次の2文字(2~4カラム):書い手の番号 次の4文字(5~8):円 集計方法 売り手番号、買い手番号別の金額を集計させたいです。 アウトプット例(表側に売り手、表頭に買い手) ********1********2 1*****500*****1150 2****1600******300 「*」は、OKWaveに投稿するときに、スペースが削除されて、表が崩れてしまうため、便宜的に入れたものです。 アウトプットでは、スペースが入っている助かります。 上記のようなテキストデータ(data.txt)を1.読み込んで、2.集計し、3新しいテキストファイル又は.csvに書き込む、 方法を教えていただけませんでしょうか。 よろしくお願いいたします。

  • yhk50
  • お礼率100% (1/1)

みんなの回答

回答No.1

・頭の4文字をkeyにして辞書を作ります。 ・has_keyで調べて、False(新規)なら後ろ4文字を数値にして辞書に追加、True(既存)なら後ろ4文字を数値にして加算。 これで、売り買い別の集計ができます。 辞書をソートして、 keyの頭2文字が01めのものを2行目に順番に出力。 keyの頭2文字が02めのものを3行目に順番に出力。 ・・・ としていけばいいでしょう。

yhk50
質問者

お礼

cistronezkさんへ 早々の回答ありがとうございます! 早速試してみたいと思います。

関連するQ&A

  • 固定長データのテキストファイルのスペースについて

    固定長データのテキストファイルをExcelで読み込むと、スペース部分が前詰めされてしまいます。 スペースもそのままカラムとして読み込む方法はありませんでしょうか。 例えば次のような固定長データがあるとします; No.  項目名   タイプ   桁数 1    コード    文字    6 2    状態    文字    10 テキストファイルで開くと下記のような表示です(以下、便宜上スペースを”_”で表します); data011________1 data02_________1 data03____1_____ これをExcelにて固定長フィールドのデータとして読み込む際、 フィールドの区切り位置として6カラム目と16カラム目に矢印を置き 全てのフィールドを文字列として読みこむとExcelでは下記のように表示されます;       A列   B列    1行目  data01 1________1 2行目  data02 1 3行目  data03 1 ここで、B2セルとB3セルがそれぞれ _________1 ____1_____ とスペースを保持したままの形で読み込む方法はありませんでしょうか。 手動でもVBでもかまいません。ご教示頂ければ幸いです。

  • CSV形式での集計

    PHPでクイズのプログラムを作ったのですが、 CSVデータの件数が多いので処理に時間がかかり、 回答の集計で困ってます。 具体的に、 PHPクイズの回答をCSV形式でanswer.txtに記録させます。 記録の内容は、 問題1の回答番号、問題2の回答番号、問題3の回答番号、 というように記録させます。 このとき、1万件くらいの回答データが入ったanswer.txtから、 問題1で回答番号を1で答えた人の数、2で答えた人の数というように、 データの集計をしたいのですが、 効率の良い集計方法を教えていただければありがたいです。 自分が考えたのは、 1.file文で全行一括読み込みしてから 2.for文でデータを検証(総データ数分だけ繰り返す) 3.回答番号が一致したら、flagに+1をする 4.flagの数が集計結果となり、これを出力する というルーチンです。 1万件くらいになると、あまり速くないです。 ちなみに、このルーチンで処理できるデータ件数って、 どのくらいが限度となるんでしょうか。 文章が稚拙で、長くなってしまい、すみません。 よろしくご指導、お願いします。

    • 締切済み
    • PHP
  • Python: TypeError

    Pythonでテキストファイルから数字を読み込む時に、スペースで区切られたデータをパラメータセットとして配列の中に格納したいのですが、その際にチェック事項があってFor LoopにTryを挟んでいます。この状態でどうしても下記のエラーが出るのですが、どのようにすれば良いのでしょうか? 宜しくお願い致します。 TypeError: argument 2 to map() must support iteration --- def ReadOutput1(): f = open('C:/Users/.../output1.txt','rb') output = [] for line in f: ls = line.split(' ') for i in range(4, 8)): try: modelParams[i-4] = map(add, float(ls[i])) except ValueError: (...) return output

  • 重複データを省いて集計する方法について

    お世話になります。 現在、重複データを省いて集計する方法を考えているのですが、実現できておりません。 実現できるSQLをご存知の方、いらっしゃいましたら情報を頂けますでしょうか。 # 私の使用しているのは、PostgreSQL8.3となります。 実現したい内容は、以下となります。  ・テーブルAからID単位で人数を集計。 ※但しファイル名が同じ場合は、1つとして集計する。   group by句でID,ファイルをグループ化してみたのですが、うまくいきません。    【テーブルA】    ID  ファイル  人数    0001 aaa.txt  3    0001 aaa.txt  3    0001 aaa.txt  3    0001 bbb.txt  3    0001 bbb.txt  3    0001 bbb.txt  3    0000 ccc.txt  3    0000 ccc.txt  3    0000 ccc.txt  3 欲しい結果は、以下となります。     ID  集計    0000 3    0001 6 お手数お掛け致しますが、ご教示のほどよろしくお願い致します。

  • 期間範囲の集計

    現在、下記のデータがあります。 A B C 1 2008/10/01 2008/10/31 質問ですが、カラムBの2008/10/01から、カラムCの2008/10/31まで同データAを集計する、SQLでの記述方法はありますでしょうか? 出力は、31となります。  ASP側からの集計は、解決できるのですが、 SQLからの集計はどのようにするのか疑問に思いましたので質問させていただきました。

  • 文字列をグループ毎に集計する

    集計を行いたいテキストデータとして、以下のようなものがあります。 あいうえお かきくけこ さしすせそ あいうえお かきくけこ EOS かきくけこ さしすせそ さしすせそ あいうえお さしすせそ EOS あいうえお かきくけこ かきくけこ かきくけこ さしすせそ EOS このデータに対して、EOSが出現するまでを一つのグループとして重複する文字列の集計を行いたいです。 EOS毎に繰り返し処理を行えば良いのではないかと考えてはいるのですが、そのプログラムがどうしても作れません。 最終的な集計結果としては、 あいうえお 2 かきくけこ 2 さしすせそ 1 さしすせそ 3 あいうえお 1 かきくけこ 1 かきくけこ 3 あいうえお 1 さしすせそ 1 というようにしたいです。 よろしくお願いします。

  • Python で、既存のテキストにデータを書き加えたいと思っています。

    Python で、既存のテキストにデータを書き加えたいと思っています。 こんにちは、 私はプログラミング初心者であります。仕事で必要に迫られたこともあり、知人より簡単だから、とPythonを薦められ、学習を始めています。 質問は、既存のテキストファイルの文頭に、数字と文字を付け加えたいと思っているのですが、上手く行きません。 既存のテキスト(data.txt)はこんな感じで、保存されています。 1111.1111   2222.2222   3333.3333   4444.4444   5555.5555 5555.5555   6666.6666   7777.7777   8888.8888   9999.9999 1010.1010   1110.1111   1210.1212   1310.1313   1414.1414 実際には縦横に永遠とデータが羅列されています。空白部分はタブ区切りになっています。横に7000ほどのデータを読むと、改行されています。これがテキスト方式で保存されています。 このデータ群の先頭に6行文のデータを追加したいと試みています。以下のような感じのデータです。 ncols      1019 nrows      1923 xllcorner    -67.2327777773961 yllcorner    44.63742951396 cellsize    0.000277777777779674 NODATA_VALUE   -999 open関数で data.txt を開き、write を使ってしまうと、data.txt 内のデータが全て消えてしまうのですが、どのようにすれば上記にある6つのデータを書き加える事ができるのでしょうか? 大本のデータは縦横に 9000x7000 近くのデータがタブで区切られて保存されており、その大きさが 500MB を越えていて、職場のPCではノートパッドで開いてから書き足す事ができません。 どなたかアドバイスを頂ければ幸いであります。

  • excelでデータの集計をしたいのですが

    エクセル上の表に地域別のデータを集計しています。 地域には番号をつけてあり、下記のようにまとめています。 地域番号   反響内容  1      ○○○○○  4      ○○・・・  2      ・・・・・ これを地域別に何個ずつデータがとれたかを集計する方法を知りたいのです。 地域番号 1 について 反響データ  ○○件   のような形にです。 エクセル上の方法を教えてください。

  • エクセルでのデータ集計

    まずは質問に目を通していただきありがとうございます。 今エクセルでのアンケートのような物をおこなっているのですが、 データの形式的には A列:名前 B列:住所 C列:可不可 D列:ジャンル このような形になっています。 可不可が1~3の番号制なのですが、 ジャンルが全角文字になっています。 文字列は決まっていますが複数可能なので●●、△△ のようになって入力されています。 このデータを使って集計したいのですが、2種類の集計を出したいです。 1つはC列の縦の集計を1は何人、2は何人、3は何人 といった集計の出し方。 もう1つが少し厄介なのですが C列が1でD列に●●が含まれているのが何人、△△が含まれているのが何人。 同じくC列が2で・・・(以下同じ) C列が3は不可の方なので数字が分かればよいので無しで大丈夫です。 こういった集計は出来ますでしょうか? 分かりにくいかもしれませんが、ご指南お願い致します。

  • EXCELから固定長テキストファイルにうまく書き込めない

    EXCELのデータを固定長で保存するためテキスト(スペース区切り)の形式で保存したのですが、 結果をメモ帳で見てみると途中(237文字)で改行?されていました。 各行先頭から26個のセルに文字や数字がはいっており、セル幅は17前後です。 1レコード1行にするにはどうすればよいでしょうか。 困っております。よろしくお願いします。 実際には次のコマンドで保存しました。 ActiveWorkbook.SaveAs Filename:=file_path & filename_txt1, _ FileFormat:=xlTextPrinter, CreateBackup:=False

専門家に質問してみよう