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

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

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

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Python

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

Q&A

2回答

1653閲覧

ID変換プログラムの作成

sheng

総合スコア8

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Python

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

0グッド

0クリップ

投稿2017/09/13 00:21

###前提・実現したいこと
PythonやPerlを用いて、IDを変換するプログラムを作成したいです。

下記のような3行データがあった場合、
そのうちA、B、Cを対応表にある001, 002, 003に変換したいです。

データ
ID1 CITY
A 東京
B 大阪
C 福岡

対応表
ID1 ID2
A 001
B 002
C 003

hashやdictionaryを使えばよさそうとのウェブサイトはありましたが、
理解できませんでした。

参考になるサイト等ご教授願います。
何卒よろしくお願い申し上げます。

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

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

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

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

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

m.ts10806

2017/09/13 00:36 編集

「理解できませんでした」というのはどのサイトのどの部分がどう理解できなかったのでしょうか?参考にしたサイトURLを記載の上、理解できた範囲・不明な範囲を明確に記述してください。https://teratail.com/help/question-tips#questionTips2-1 また「データ」「対応表」はデータベースを利用しているのであればデータベースの種類とバージョンを記載してください。もしかしたらSQL実行だけで済む話かもしれませんし。
guest

回答2

0

pythonは詳しくないので、perlでごく素朴に……。
ID対応表をhashに丸ごと読み込み、次にデータファイルを読み取り、IDを付け替えて標準出力に吐き出すperlスクリプトを書いてみました。

windows10マシン(CPU=i5-2400@3.10Ghz, RAM=8.00GB)上のcygwinで、IDを100万件まで増やして実行してみましたが、全部で3秒ぐらいで終わりました。

コトがIDの付け替えにとどまっている限り、データの量に関してはあまり神経質になる必要はないのではないかと思いました。もちろんこれよりもけた違いにデータが「大量」であるとか、この後にいろいろ重たい処理をするとかであれば話も変わってくるでしょうが。

これで間に合わない規模の大容量データをperlでお手軽に扱うとすれば、GDBMという選択肢もあると思います(参考サイト)。

perl

1#!/usr/bin/perl -w 2use strict; 3use warnings; 4 5my %id; 6 7my $datafile="data.txt"; 8my $idfile ="idtable.txt"; 9 10# read id-association table 11open(my $fhi, "<", $idfile) or die; 12while(<$fhi>){ 13 chomp; 14 my($id1,$id2)=split; 15 $id{$id1}=$id2; 16} 17 18# read main data and output 19open($fhi, "<", $datafile) or die; 20while(<$fhi>){ 21 chomp; 22 my($id,$name)=split; 23 print join("\t", $id{$id}, $name),"\n"; 24}

投稿2017/09/18 16:51

KojiDoi

総合スコア13671

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

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

0

hashやdictionaryを使えばよさそうとのウェブサイトはありましたが、

理解できませんでした。

いい線行ってます :)
それを使うのが無難です。

私個人としてはDive Into Python 3をよく勧めていますが、もしかしたら不足部分があると思いますので、実際に質問文を例に辞書データを作るソースコードをここに挙げてみます。

python

1# Dictionary 定義 2city_dict = { 3 "A": "東京", 4 "B": "大阪", 5 "C": "福岡" 6} 7 8number_dict = { 9 "A": 1, 10 "B": 2, 11 "C": 3 12} 13 14print(city_dict["B"]) #=> 大阪 が表示される。 15print(number_dict["C"]) #=> 3 が表示される。

しかしながら、shengさんはどうせなら一つの辞書にまとめたいと思うかもしれません。
大丈夫です。Pythonに関しては辞書の入れ子構造も可能です。(おそらくPerlも可能だと思いますが)

python

1city_and_id2_dict = { 2 "A": { 3 "city": "東京", 4 "id2": 1 5 }, 6 "B": { 7 "city": "大阪", 8 "id2": 2 9 }, 10 "C": { 11 "city": "福岡", 12 "id2": 3 13 } 14} 15 16print(city_and_id2_dict["A"]["city"]) #=> 東京 が表示される 17print(city_and_id2_dict["C"]["id2"] #=> 3 が表示される

という感じで辞書を使います。

わからないところがあればお気軽にコメントでおっしゃってください ;)

投稿2017/09/13 00:54

manzyun

総合スコア2244

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

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

sheng

2017/09/13 01:21 編集

manzyun様 早速のご回答ありがとうございます。 ご提示いただいたプログラムを確認することができました。 しかし私の最初の質問に不足がありましたので、もう少しお手伝いいただけますと助かります。 データと対応表が例に示したような3行ではなく大量にあり、 csvデータとしてimportが必要な場合の対応方法について、 ご教授いただけないでしょうか。 何卒よろしくお願い申し上げます。
manzyun

2017/09/13 01:37

CSVに関して言えば、普通にファイルを1行ずつ読んで、カンマ区切りごとに辞書の各項目にappendするというのも一つですが、すでにPythonではCSVのライブラリがあるようですね。 https://docs.python.jp/3/library/csv.html 後は愚直にfor文で各行の列を辞書にappendするなり、内包表記というテクニックを使って辞書を作るのも手ですが、どちらを使うかはお任せします。 ソースがどうしても思いつかない場合はまたご相談ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問