Python學習記錄之:IO編程

IO編程

文件讀寫

Python中文件讀寫語法和C兼容

  • 讀文件
    使用Python內置的open()函數(shù)滓技,傳入文件名和標示符:
f = open('/Users/michael/test.txt', 'r')  # 'r' 表示讀,文件不存在會拋出IOError
print f.read()  # 讀出文件中的全部內容
f.close()  # 關閉文件屿储,文件打開后必須關閉

由于使用try來捕獲不可預料的IOError并在finally中關閉文件比較繁瑣姓蜂,使用with來簡化:

with open("file_test.py", 'r') as f:
    print f.read()  # 一次讀取全部文件挥唠,適用于小文件
    print f.read(10)  # 一次讀取10字節(jié)
    print f.readline()  # 一次讀取一行,讀配置文件方便
    print f.readlines()  # 一次讀取全部行并返回按行排列(末尾有'\n')的list
  • file-like Object
    read()方法的對象

  • 二進制文件
    'rb'模式打開

  • 字符編碼
    可以先用'rb'模式打開后再用特定編碼解碼:

with open("file_test.py", 'rb') as f:  # 二進制模式打開文件
    print f.read(10)
    print f.readline().decode('gbk')  # 用GBK編碼解碼

或者直接用某種編碼打開:

import codecs
with codecs.open("file_test.py", 'r', 'gbk'):
    print f.readline()
  • 寫文件
    打開文件時使用'w'纲菌、'wb'方式挠日,使用write()來寫入文件,但文件不一定會立馬寫入磁盤翰舌,只有當flush()close()調用的時候才會確定寫入
  • 打開模式
  r     以讀方式打開
  w     以寫方式打開嚣潜,打開時會清空文件
  a     以追加模式打開 (從 EOF 開始, 必要時創(chuàng)建新文件)
  +     以讀寫模式打開
  b     以二進制模式打開
  t     以文本方式打開

模式可組合使用

操作文件和目錄

  • 系統(tǒng)信息及環(huán)境變量
  import os

  print os.name
  # print os.uname()  # win下沒有這個函數(shù)
  print os.environ  # 打印環(huán)境變量
  print os.getenv('path')  # 獲取某個環(huán)境變量的值
  • 操作文件和目錄
  import os

  import shutil

  print os.name
  # print os.uname()  # win下沒有這個函數(shù)
  print os.environ  # 打印環(huán)境變量
  print os.getenv('path')  # 獲取某個環(huán)境變量的值

  abspath = os.path.abspath('.')  # 查看當前目錄的絕對路徑,abspath()尋找當前路徑下的文件的絕對路徑
  print abspath
  join = os.path.join('.', 'testdir')  # 把兩個路徑合成一個, 可以正確處理不同操作系統(tǒng)的路徑分隔符
  print join
  os.mkdir(join)  # 創(chuàng)建目錄
  os.rmdir(join)  # 刪除目錄
  print os.path.split(join)  # 把一個路徑拆分為兩部分椅贱,后一部分總是最后級別的目錄或文件名

  os.rename('file_test.txt', 'filetest.txt')  # 對文件重命名
  os.remove('filetest.txt')  # 刪掉文件
  shutil.copyfile('file_test.txt', 'filetest.txt')  # 復制文件

  print [x for x in os.listdir('.') if os.path.isdir(x)]   # 列出當前目錄下的所有目錄
  print [x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py']  # 列出所有的.py文件

Python的os模塊封裝了操作系統(tǒng)的目錄和文件操作懂算,要注意這些函數(shù)有的在os模塊中,有的在os.path模塊中

序列化

我們把變量從內存中變成可存儲或傳輸?shù)倪^程稱之為序列化庇麦,在Python中叫pickling计技,在其他語言中也被稱之為serialization,marshalling山橄,flattening等等

# coding=utf-8
try:
    import cPickle as pickle
except ImportError:
    import pickle

d = dict(name='Bob', age=20, score=88)
print pickle.dumps(d)  # 序列化為字符串

f = open('dump.txt', 'ab+')
pickle.dump(d, f)  # 序列化并保存到文件
f.close()

f = open('dump.txt')
d = pickle.load(f)  # 從file-like Object對象反序列化
f.close()
print d
  • Json
  # coding=utf-8
  import json
  
  d = dict(name='Bob', age=20, score=88)
  json_str = json.dumps(d)
  print json_str

  json_object = json.loads(json_str)
  print json_object
  print json_object['name']

  class Student(object):
      # __slots__ = ('name', 'age', 'score')  # 沒有定義__slots__時對象內部默認使用dict來保存屬性

      def __init__(self, name, age, score):
          self.name = name
          self.age = age
          self.score = score

  def student2dict(student):
      return {
          'name': student.name,
          'age': student.age,
          'score': student.score
      }

  def dict2student(d):
      return Student(d['name'], d['age'], d['score'])

  s = Student('Bob', 20, 88)
  # print json.dumps(s, default=student2dict)  # 使用序列化函數(shù)
  json_str = json.dumps(s, default=lambda obj: obj.__dict__)  # 沒有定義__slots__時對象內部默認使用dict來保存屬性垮媒,有__slots__的類無法使用這個特性
  print json_str
  json_object = json.loads(json_str, object_hook=dict2student)
  print json_object

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市航棱,隨后出現(xiàn)的幾起案子睡雇,更是在濱河造成了極大的恐慌,老刑警劉巖饮醇,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件它抱,死亡現(xiàn)場離奇詭異,居然都是意外死亡朴艰,警方通過查閱死者的電腦和手機观蓄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呵晚,“玉大人,你說我怎么就攤上這事沫屡《叮” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵沮脖,是天一觀的道長金矛。 經(jīng)常有香客問我芯急,道長,這世上最難降的妖魔是什么驶俊? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任娶耍,我火速辦了婚禮,結果婚禮上饼酿,老公的妹妹穿的比我還像新娘榕酒。我一直安慰自己,他們只是感情好故俐,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布想鹰。 她就那樣靜靜地躺著,像睡著了一般药版。 火紅的嫁衣襯著肌膚如雪辑舷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天槽片,我揣著相機與錄音何缓,去河邊找鬼。 笑死还栓,一個胖子當著我的面吹牛碌廓,可吹牛的內容都是我干的。 我是一名探鬼主播蝙云,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼氓皱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勃刨?” 一聲冷哼從身側響起波材,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎身隐,沒想到半個月后廷区,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡贾铝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年隙轻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垢揩。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡玖绿,死狀恐怖,靈堂內的尸體忽然破棺而出叁巨,到底是詐尸還是另有隱情斑匪,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布锋勺,位于F島的核電站蚀瘸,受9級特大地震影響狡蝶,放射性物質發(fā)生泄漏。R本人自食惡果不足惜贮勃,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一贪惹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寂嘉,春花似錦奏瞬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棵譬,卻和暖如春显蝌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背订咸。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工曼尊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脏嚷。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓骆撇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親父叙。 傳聞我的和親對象是個殘疾皇子神郊,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容