pythonデータストレージテクニック

3233 ワード

1.テキストストレージ
例えば、私たちは今10編の文章を持っていて、各文章は3つの部分から構成されていて、テーマ、作者、内容(title、author、content)、それからこの3つの部分を明確に展示して、そして各文章の間に=====で分割することを要求します.
大まかな考え方:
各文章の3つの部分について、前の2つの部分を1行にまとめ、各文章の間を====で分割します.
コード実装
itemsはその10の文章をitemで表すと、
for item in items:
   title=item[0]
   author=item[1]
   content=item[2]
   insertlist=[title,author,content]
   with open("1.text",'a',encoding='utf-8') as fs:
               fs.write('
'.join(insertlist)) # , join
fs.write('
'+'='*60='
')

2.Jsonのストレージ
json文字列には二重引用符が必要であることに注意してください.
import json
with open('data.json','w','encoding='utf-8') as fs:
     fs.write(json.dumps(data,indent=2,ensure_ascii=False))

ここでindentは、インデント文字の個数を表し、加算しないとjsonの階層感がなくなる、json.dumpsシーケンス化時に中国語でデフォルトで使用するascii符号化.本物の中国語を出力するにはensureを指定する必要があります.ascii=False.
3.CSVのメモリ
pythonサードパーティモジュールpandasを使用して、DataFrameオブジェクトのto_を呼び出します.csvメソッドはcsvにデータを保存します
import pandas as pd
df=pd.DataFrame(         )
df.to_csv('weiboi.csv', encoding='gb2312', index = False) #insert into csv

4.mysql-動的sql文
動的に変化する辞書を入力すればいいです.
たとえば、最初はuserというテーブルがありました.3つのフィールドid、name、ageを保存して、次の辞書とテーブル名を構築する必要があります.
d={'id':'1001','name':'zhangsan','age':'17'}  
tables='user'
d={'id':'1001','name':'zhangsan','age':'17'}  

tables='user'
keys=','.join(d.key())
values=','.join(['%s']*len(d))
sql=f'INSERT INTO {table}({keys})VALUES({values})'
try:
   if cursor.execute(sql,tuple(d.values())):
                  print('ok')
                  db.commit()
except:
     print('no')
     db.rollback()
db.close()

挿入操作は完了しましたが、プライマリ・キーの存在がより細かくなる場合があります.存在しない場合は挿入はどうすればいいのでしょうか.まず、次の文を見てみましょう.
INSERT INTO user(id,name,age) VALUES(%s,%s,%s) ON DUPLICATE KEY UPDATE id=%s,name=%s,age=%s

ON DUPLICATE KEY UPDATEは以下の目的を達成できる:
データベースにレコードを挿入します.
このデータのプライマリ・キー値/UNIQUE KEYが既にテーブルに存在する場合、UPDATEの後の更新操作が実行されます.
そうでない場合は、新しいレコードを挿入します.
そして私たちは上全体にコードを整理します.次のように
 
d={'id':'1001','name':'zhangsan','age':'17'}  

tables = 'name'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'INSERT INTO {tables}({keys})VALUES({values}) ON DUPLICATE KEY UPDATE '
update = ','.join([f"{k}={v}" for k,v in data_dic.items()])
sql += update
try:
   if cursor.execute(sql,tuple(d.values())):
                  print('ok')
                  db.commit()
except:
     print('no')
     db.rollback()
db.close()

  
同じようにpandasを知っていれば
 pd.io.sql.to_sql(datatosql, 'tablename', yconnect, schema='ptos', if_exists='append')

 
転載先:https://www.cnblogs.com/c-x-a/p/9014897.html