【2017-09-13】數(shù)據(jù)編碼與處理(一)

csv文件及json數(shù)據(jù)處理

  • 讀寫csv文件

    讀與寫常用函數(shù)

    • csv.reader(),讀取為一個元組的序列
    • csv.DictReader() ,讀取為一個字典序列
    • csv.writer()
    • csv.DictWriter()

??讀取csv文件

import csv
from collections import namedtuple

with open("country.csv","r") as f:
       csv_r=csv.reader(f)
       headers=next(csv_r)
       Row=namedtuple("Row",headers)
       for r in csv_r:
              row=Row(*r)
              print(row)

??寫csv文件,通常情況下醒颖,寫入csv文件內容會空一行,為了解決該問題,python3,需要添加參數(shù)newline='';python2將模式改成wb即可

#示例:寫入字典的序列驻民,使用DictWriter()
headers = ['Symbol', 'Price', 'Date', 'Time', 'Change', 'Volume']
rows = [{'Symbol':'AA', 'Price':39.48, 'Date':'6/11/2007',
         'Time':'9:36am', 'Change':-0.18, 'Volume':181800},
        {'Symbol':'AIG', 'Price': 71.38, 'Date':'6/11/2007',
          'Time':'9:36am', 'Change':-0.15, 'Volume': 195500},
        {'Symbol':'AXP', 'Price': 62.58, 'Date':'6/11/2007',
          'Time':'9:36am', 'Change':-0.46, 'Volume': 935000}]
with open("text.csv","w",,newline='') as f:
       f_csv=csv.DictWriter(f,headers)
       f_csv.writeheader()
       f_csv.writerows(rows)

??值得注意的是,csv產生的數(shù)據(jù)為字符串類型履怯,如需要轉化成對應數(shù)據(jù)類型回还,必現(xiàn)做一個數(shù)據(jù)類型的轉換,此時推導式排上用場

#示例1:轉化成特定數(shù)據(jù)類型的元組
data_type=[str,float,str,str,float,int]
with open("text.csv","r") as f:
       f_csv=csv.reader(f)
       headers=next(f_csv)
       for item in f_csv:
              row=tuple((convert(value)for convert,value in zip(data_type,item)))
              print(row)

#示例2:轉化成字典序列
field_types = [
        ('Symbol',str),
        ('Price',float),
        ('Date',str),
         ('Time',str),
         ('Change',float),
         ('Volume',int)]
with open('text.csv') as f:
       for row in csv.DictReader(f):
              print(row)
              row.update((key, conversion(row[key]))for key, conversion in field_types)
              print(row)
  • 讀寫json數(shù)據(jù)
    Json 即JavaScript Object Notation的簡稱, 支持的基本數(shù)據(jù)類型有bool叹洲、int柠硕、float、str运提、None蝗柔、以及包含這些基本數(shù)據(jù)類型的lists闻葵、dictionaries(keys需要字符類型)、tuples癣丧。
    python中槽畔,json編碼與解碼字符串,主要函數(shù)是json.dumps()和json.loads()
>>> import json
>>> data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}
>>> json.dumps(data)
'{"shares": 100, "name": "ACME", "price": 542.23}'
>>> json_str=json.dumps(data)
>>> json.loads(json_str)
{'shares': 100, 'name': 'ACME', 'price': 542.23}
>>> 

??如果要處理的是文件坎缭,而不是字符串竟痰,則使用json.dump()、json.load()

import json
data = {
'name' : 'ACME',
'shares' : 100,
'price' : 542.23
}

with open("json.json","w") as f:
    json.dump(data,f)

??JSON 編碼的格式對于 python 語法而已幾乎是完全一樣的掏呼,除了一些小的差異之外坏快。比如, True 會被映射為 true憎夷, False 被映射為 false莽鸿,而 None 會被映射為 null。

>>> import json
>>> d = {'a': True, 'b': 'Hello', 'c': None}
>>> json.dumps(d)
'{"c": null, "a": true, "b": "Hello"}'
>>> 

??格式化json編碼后的數(shù)據(jù)拾给,尤其對于數(shù)據(jù)結構嵌套深或者包含大量字段祥得,通常直接打印來看的話,可讀性比較差蒋得,可以通過格式化的方式级及、提高可讀性。
- pprint()應用
- dumps()函數(shù)中使用indent參數(shù)

>>> strs={  
    'employee':  
    {  
        'firstName': "John",  
        'lastName' : "Doe",  
        'employeeNumber' : 123,  
        'title' : "Accountant"  
    }  
}
>>> json_Str=json.dumps(strs,indent=4)
>>> print(json_Str)
{
    "employee": {
        "employeeNumber": 123,
        "lastName": "Doe",
        "firstName": "John",
        "title": "Accountant"
    }
}
>>> 

??一般來說额衙,json編碼loads()會根據(jù)指定數(shù)據(jù)創(chuàng)建lists或者dictionaries饮焦,如果你想要創(chuàng)建其他類型的對象,可以給 json.loads() 傳遞 object pairs hook 或 object hook 參數(shù)窍侧。

>>>#__dict__()將字典轉化成對象屬性
>>> class JSONObject:
    def __init__(self, d):
        self.__dict__ = d
>>> s = '{"name": "ACME", "shares": 50, "price": 490.1}'
>>> data = json.loads(s, object_hook=JSONObject)
>>> data.name
'ACME'
>>> 

參考文章:
http://www.cnblogs.com/to-creat/p/7215510.html
https://www.crifan.com/python_csv_writer_writerow_redundant_new_line/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末县踢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伟件,更是在濱河造成了極大的恐慌硼啤,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斧账,死亡現(xiàn)場離奇詭異谴返,居然都是意外死亡,警方通過查閱死者的電腦和手機咧织,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門亏镰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拯爽,你說我怎么就攤上這事索抓。” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵逼肯,是天一觀的道長耸黑。 經常有香客問我,道長篮幢,這世上最難降的妖魔是什么大刊? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮三椿,結果婚禮上缺菌,老公的妹妹穿的比我還像新娘。我一直安慰自己搜锰,他們只是感情好伴郁,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蛋叼,像睡著了一般焊傅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狈涮,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天狐胎,我揣著相機與錄音,去河邊找鬼歌馍。 笑死握巢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的松却。 我是一名探鬼主播镜粤,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玻褪!你這毒婦竟也來了?” 一聲冷哼從身側響起公荧,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤带射,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后循狰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窟社,經...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年绪钥,在試婚紗的時候發(fā)現(xiàn)自己被綠了灿里。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡程腹,死狀恐怖匣吊,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤色鸳,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布社痛,位于F島的核電站,受9級特大地震影響命雀,放射性物質發(fā)生泄漏蒜哀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一吏砂、第九天 我趴在偏房一處隱蔽的房頂上張望撵儿。 院中可真熱鬧,春花似錦狐血、人聲如沸淀歇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽房匆。三九已至,卻和暖如春报亩,著一層夾襖步出監(jiān)牢的瞬間浴鸿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工弦追, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岳链,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓劲件,卻偏偏與公主長得像掸哑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子零远,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內容