0

次のような構造を持つ python リストがあります。

apts = [ [2083, \
           [ ["price", "$1000 / month"], \
             ["sq ft.", "500"], \
             ["amenities", "gym hardwood floor"]]], \
          [1096, \ 
           [ ["price", "$1200 / month"], \
             ["sq ft.", "700"], \
             ["a/c", "true"]]], \
          [76, \ 
           [ ["price", "$1100 / month"], \
             ["Pets", "true"], \
             ["a/c", "true"]]]] 

mysql データベースに簡単に転送できるような形式で取得するにはどうすればよいですか? 基本的に、次のように、簡単に転送できるテーブル/csvファイルに似た方法でこれを再配置したいと思います。

id, price, sq ft, amenities, a/c, pets
2083, $1000 / month, 500, gym hardwood floor, ,
1096, $1200 / month, 700, , true,
76, $1100 / month, , true, true

前もって感謝します。これらを少しずつマッピングする方法を考えることができますが、それはかなり非効率的で、python の知識が弱いので、このデータを変換するための他の簡単な方法があることを願っています...

入れ子になったリストの代わりに、入れ子になった辞書構造を使用すると役に立ちますか?

4

2 に答える 2

1

質問を誤解しているかもしれませんが、リストを csv として出力するには、次のようにします。

import csv

out_file = open('/path/to/out_file.csv', 'wb')
writer = csv.writer(out_file, quoting=csv.QUOTE_ALL)
for data_row in apts:
    writer.writerow(data_row)

SQL にインポートするには (リストの順序が正しく、データを適切にエスケープしていると仮定します)

import MySQLdb
mysql = MySQLdb.connect(host=host, user=user,passwd=passwd,db=db)
cursor = self.mysql.cursor()
queries = []
for row in apts:
    queries.append("('%s')" % "','".join(row) ) #< this will join the data encapsuled in apostrophes
cursor.execute( "INSERT INTO TABLE VALUES %s" % ",".join(queries) ) #< Insert the data

これをデータベースにダンプする場合は、辞書を使用することをお勧めします。これにより、データが正しい場所に 100% 移動します。

于 2013-02-08T22:12:49.770 に答える
1

私の理解では、複雑な構造を値の文字列に変換するのが難しいということです。これを行う方法は次のとおりです。

from collections import OrderedDict

out = []

for r in apts:
    row = OrderedDict([('id',''), ('price',''), ('sqft',''), 
                       ('amenities',''),('ac',''),('pets','')])        
    row['id']=r[0]
    for sr in r[1]:
        row[sr[0].lower().translate(None," ./")]=sr[1]
    out.append(row)

#print result        
for o in out:
    s = ",".join(map(str, o.values()))
    print s

版画

2083,$1000 / month,500,gym hardwood floor,,
1096,$1200 / month,700,,true,
76,$1100 / month,,,true,true
于 2013-02-09T03:11:08.250 に答える