仕事でCSVをデータベース投入用SQLにするような処理が必要だったのでパッパと書いてみた。同じ処理を違う言語で書くと、言語の違いがわかって面白い。
CSVの中身を「・」(中黒)で区切る変な仕様だけど、これはお客さんの要求(?)らしいので無視してください。私はこんな仕様作りません(笑)。
まずはPHPのコードと雑感。
- foreachのところがちょっと読みづらいと思う。
- explodeは便利だと思うけど、マルチバイト文字を放り込むとどういう挙動をするか考える必要がある。
[code lang=‘php’] <?php $csv = “Example company,Division,picture01.jpg,検索・用・文字・ダヨ\n”; $csv .= “mitsukuni.org,Research and Development,picture02.jpg,mitsukuni・org・ダヨ”;
foreach (explode(“\n”, $csv) as $line) { list($company, $div, $fl, $keywords) = explode(“,”, $line);
foreach (explode(“・”, $keywords) as $keyword) { printf(“INSERT INTO keywords(keyword, company) VALUES(‘%s’, ‘%s’);\n”, $keyword, $company); } } [/code]
次にPythonのコードと雑感。
- 内部コードはunicodeなのでマルチバイト処理に気を使う必要なし(たぶん)
- PHP foreach()に相当する物がシンプルに書ける。シェルスクリプトみたい
- インデントが構文に含まれているので見た目がすっきり
[code lang=‘python’]
-- coding: utf-8 --#
csv = u'Example company,Division,picture01.jpg,検索・用・文字・ダヨ\n' csv += u'mitsukuni.org,Research and Development,picture02.jpg,mitsukuni・org・ダヨ'
for line in csv.split(‘\n’): [company, division, file, keywords] = line.split(‘,’)
for word in keywords.split(u'・'): print “INSERT INTO keywords(keyword, company) VALUES(‘%s’, ‘%s’);” % (word, company) [/code]
[ad#text_wide]