1

私は、自分が書いた BASH スクリプトを Python に変換する過程にいます (私の BASH チョップは、私が働いている少数派に私を置きました)。

while readファイルを開き、タブ区切りのコンテンツを HTML テーブルにフォーマットするBASH関数ループがあります。

function table_item_row {
    OLD_IFS="${IFS}"
    IFS=$'\t'
    while read CODE PRICE DESCRIPTION LINK PICTURE LINE; do
        printf "    <tr>\n"
        printf "      <td><img src=\"%s\"></td>\n" "${PICTURE}"
        printf "      <td><a href=\"%s\">%s</a> ($%.2f)</td>\n" "${LINK}" "${DESCRIPTION}" "${PRICE}"
        printf "    </tr>\n"
    done < inventory.txt
    IFS="${OLD_IFS}"
}

私はPythonでこのようなことをすることができますが、csvモジュールについて聞いたので、好ましい方法があるかどうか疑問に思っています:

for line in open(filename):
    category, code, price, description, link, picture, plans = line.split("\t")
    print "    <tr>"
    print "      <td><img src=\"" + picture + "\"></td>"
    print "      <td><a href=\""+ link + "\">" + description + "</a> ($%.2f)</td>" % float(price)
    print "    </tr>"
4

2 に答える 2

3

csvモジュール文字列の書式設定を使用します。

import csv

fields = ('category', 'code', 'price', 'description', 'link', 'picture', 'plans')
table_row = '''\
    <tr>
      <td><img src="{picture}"></td>
      <td><a href="{link}">{description}</a> ({price:.2f})</td>
   </tr>
'''

with open(filename, 'rb') as infile:
    reader = csv.DictReader(infile, fieldnames=fields, delimiter='\t')
    for row in reader:
        row['price'] = float(row['price'])  # needed to make `.2f` formatting work
        print table_row.format(**row)

クラスは行を辞書に変換します。これは、 -powered 文字列テンプレートcsv.DictReader()で名前付きスロットを使用できるため、ここでは非常に便利です。str.format()

于 2013-07-17T15:48:49.410 に答える
0

モジュールを使用できcsvます。

>>> import csv
>>> with open(filename) as f:
    for row in csv.reader(f, delimiter='\t'):
        category, code, price, description, link, picture, plans = row
于 2013-07-17T15:48:32.953 に答える