[ 收藏 ] [ 简体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  •  管理

     一般管理学
     市场/营销
     会计
     金融/投资
     经管音像
     电子商务
     创业企业与企业家
     生产与运作管理
     商务沟通
     战略管理
     商业史传
     MBA
     管理信息系统
     工具书
     外文原版/影印版
     管理类职称考试
     WTO
     英文原版书-管理
  •  投资理财

     证券/股票
     投资指南
     理财技巧
     女性理财
     期货
     基金
     黄金投资
     外汇
     彩票
     保险
     购房置业
     纳税
     英文原版书-投资理财
  •  经济

     经济学理论
     经济通俗读物
     中国经济
     国际经济
     各部门经济
     经济史
     财政税收
     区域经济
     统计 审计
     贸易政策
     保险
     经济数学
     各流派经济学说
     经济法
     工具书
     通货膨胀
     财税外贸保险类考试
     英文原版书-经济
  •  社会科学

     语言文字
     社会学
     文化人类学/人口学
     新闻传播出版
     社会科学总论
     图书馆学/档案学
     经典名家作品集
     教育
     英文原版书-社会科学
  •  哲学

     哲学知识读物
     中国古代哲学
     世界哲学
     哲学与人生
     周易
     哲学理论
     伦理学
     哲学史
     美学
     中国近现代哲学
     逻辑学
     儒家
     道家
     思维科学
     马克思主义哲学
     经典作品及研究
     科学哲学
     教育哲学
     语言哲学
     比较哲学
  •  宗教

  •  心理学

  •  古籍

     经部  史类  子部  集部  古籍管理  古籍工具书  四库全书  古籍善本影音本  中国藏书
  •  文化

     文化评述  文化随笔  文化理论  传统文化  世界各国文化  文化史  地域文化  神秘文化  文化研究  民俗文化  文化产业  民族文化  书的起源/书店  非物质文化遗产  文化事业  文化交流  比较文化学
  •  历史

     历史普及读物
     中国史
     世界史
     文物考古
     史家名著
     历史地理
     史料典籍
     历史随笔
     逸闻野史
     地方史志
     史学理论
     民族史
     专业史
     英文原版书-历史
     口述史
  •  传记

  •  文学

  •  艺术

     摄影
     绘画
     小人书/连环画
     书法/篆刻
     艺术设计
     影视/媒体艺术
     音乐
     艺术理论
     收藏/鉴赏
     建筑艺术
     工艺美术
     世界各国艺术概况
     民间艺术
     雕塑
     戏剧艺术/舞台艺术
     艺术舞蹈
     艺术类考试
     人体艺术
     英文原版书-艺术
  •  青春文学

  •  文学

     中国现当代随笔
     文集
     中国古诗词
     外国随笔
     文学理论
     纪实文学
     文学评论与鉴赏
     中国现当代诗歌
     外国诗歌
     名家作品
     民间文学
     戏剧
     中国古代随笔
     文学类考试
     英文原版书-文学
  •  法律

     小说
     世界名著
     作品集
     中国古典小说
     四大名著
     中国当代小说
     外国小说
     科幻小说
     侦探/悬疑/推理
     情感
     魔幻小说
     社会
     武侠
     惊悚/恐怖
     历史
     影视小说
     官场小说
     职场小说
     中国近现代小说
     财经
     军事
  •  童书

  •  成功/励志

  •  政治

  •  军事

  •  科普读物

  •  计算机/网络

     程序设计
     移动开发
     人工智能
     办公软件
     数据库
     操作系统/系统开发
     网络与数据通信
     CAD CAM CAE
     计算机理论
     行业软件及应用
     项目管理 IT人文
     计算机考试认证
     图形处理 图形图像多媒体
     信息安全
     硬件
     项目管理IT人文
     网络与数据通信
     软件工程
     家庭与办公室用书
  •  建筑

     执业资格考试用书  室内设计/装潢装修  标准/规范  建筑科学  建筑外观设计  建筑施工与监理  城乡规划/市政工程  园林景观/环境艺术  工程经济与管理  建筑史与建筑文化  建筑教材/教辅  英文原版书-建筑
  •  医学

     中医
     内科学
     其他临床医学
     外科学
     药学
     医技学
     妇产科学
     临床医学理论
     护理学
     基础医学
     预防医学/卫生学
     儿科学
     医学/药学考试
     医院管理
     其他医学读物
     医学工具书
  •  自然科学

     数学
     生物科学
     物理学
     天文学
     地球科学
     力学
     科技史
     化学
     总论
     自然科学类考试
     英文原版书-自然科学
  •  工业技术

     环境科学
     电子通信
     机械/仪表工业
     汽车与交通运输
     电工技术
     轻工业/手工业
     化学工业
     能源与动力工程
     航空/航天
     水利工程
     金属学与金属工艺
     一般工业技术
     原子能技术
     安全科学
     冶金工业
     矿业工程
     工具书/标准
     石油/天然气工业
     原版书
     武器工业
     英文原版书-工业技
  •  农业/林业

     园艺  植物保护  畜牧/狩猎/蚕/蜂  林业  动物医学  农作物  农学(农艺学)  水产/渔业  农业工程  农业基础科学  农林音像
  •  外语

  •  考试

  •  教材

  •  工具书

  •  中小学用书

  •  中小学教科书

  •  动漫/幽默

  •  烹饪/美食

  •  时尚/美妆

  •  旅游/地图

  •  家庭/家居

  •  亲子/家教

  •  两性关系

  •  育儿/早教

  •  保健/养生

  •  体育/运动

  •  手工/DIY

  •  休闲/爱好

  •  英文原版书

  •  港台图书

  •  研究生
     工学
     公共课
     经济管理
     理学
     农学
     文法类
     医学

  •  音乐
     音乐理论

     声乐  通俗音乐  音乐欣赏  钢琴  二胡  小提琴
  • Python大學教程
    該商品所屬分類:計算機/網絡 -> 程序設計
    【市場價】
    342-496
    【優惠價】
    214-310
    【作者】 張基溫 
    【所屬類別】 圖書  教材  研究生/本科/專科教材  工學圖書  計算機/網絡  程序設計  Python 
    【出版社】清華大學出版社 
    【ISBN】9787302504542
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    開本:16開
    紙張:膠版紙
    包裝:平裝-膠訂

    是否套裝:否
    國際標準書號ISBN:9787302504542
    叢書名:高等教育質量工程信息技術繫列示範教材

    作者:張基溫
    出版社:清華大學出版社
    出版時間:2018年08月 


        
        
    "

    產品特色
    編輯推薦
    ? 彰顯“計算思維 語言藝術 工程規範”的程序設計教育理念。
    ? 概念力求精準,突出思想性、啟發性、本質性。
    ? 結構力求嚴謹、緊湊,便於知識總結、梳理。
    ? 例題力求經典,例程力求簡短,便於閱讀、理解。
    ? 素材力求豐富,創造一個良好的知識建構環境和後期學習參考。
    ? 習題力求豐富、多樣,減輕教師開發題目的負擔。
    ? 零起點、輕松入門、螺旋式深入,適合不同層次的教學。
    ? 以Python 3.6.1為藍本,例程多在IDLE界面上調試,以便初學者快速掌握Python語法。

     
    內容簡介
    本書是高等學校Python基礎課程的教材。全書由組成。介紹Python的基本知識,內容包括Python的特點、數據對像、變量、輸入輸出等,使讀者對Python有一個初步了解;為Python程序結構,內容包括選擇結構、循環結構、函數、模塊、異常處理等;為容器,內容包括序列容器、無序容器、迭代器、生成器與推導表達式;為面向類的程序設計,內容包括類與對像、類與對像的通用屬性與操作、類的繼承;為Python數據處理,內容包括文件操作、數據庫操作、文件與目錄管理;為Python網絡編程,內容包括Python Socket編程、Python WWW應用開發;為Python GUI開發,內容包括GUI三要素、GUI程序結構、GUI制作示例。
    本書力求內容精練、概念準確、代碼便於閱讀、習題豐富全面、適合教也容易學。為了便於初學者很快能使用以豐富的模塊支撐的Python環境,書後給出了Python運算符、Python內置函數、Python標準模塊庫目錄和Python 3.0標準異常類結構。
    本書適合作為高等學校零基礎開設Python課程的教材,也適合作為程序設計愛好者和有關專業人員學習的參考書。
    目錄
    目錄
    Python起步 1
    1.1 程序設計語言與Python 1
    1.1.1 計算機程序設計語言 1
    1.1.2 高級程序設計語言分類 3
    1.1.3 Python及其特點 6
    1.1.4 Python模塊與腳本文件 8
    練習1.1 11
    1.2 Python數值對像類型 12
    1.2.1 Python數據類型 12
    1.2.2 Python內置數值類型 13
    1.2.3 Decimal和Fraction 15
    練習1.2 16
    1.3 Python數據對像、變量與賦值 17目錄
      Python起步    1
    1.1  程序設計語言與Python    1
    1.1.1  計算機程序設計語言    1
    1.1.2  高級程序設計語言分類    3
    1.1.3  Python及其特點    6
    1.1.4  Python模塊與腳本文件    8
    練習1.1    11
    1.2  Python數值對像類型    12
    1.2.1  Python數據類型    12
    1.2.2  Python內置數值類型    13
    1.2.3  Decimal和Fraction    15
    練習1.2    16
    1.3  Python數據對像、變量與賦值    17
    1.3.1  Python可變對像與不可變對像    17
    1.3.2  Python變量與賦值操作    18
    1.3.3  Python垃圾回收與對像生命期    21
    1.3.4  Python標識符與保留字    22
    練習1.3    23
    1.4  數值計算——計算器    24
    1.4.1  內置算術操作符與算術表達式    24
    1.4.2  內置數學函數    27
    1.4.3  math模塊    29
    練習1.4    31
    1.5  輸入與輸出    32
    1.5.1  回顯與print()函數的基本用法    32
    1.5.2  轉義字符與print()函數的格式控制    33
    1.5.3  input()函數    37
    練習1.5    37
      Python程序結構    38
    2.1  命題與判斷    39
    2.1.1  布爾類型    39
    2.1.2  比較表達式    39
    2.1.3  邏輯表達式    40
    2.1.4  身份判定操作    43
    練習2.1    43
    2.2  選擇結構    45
    2.2.1  if-else型選擇結構    45
    2.2.2  if-else嵌套與if-elif選擇結構    47
    練習2.2    49
    2.3  循環結構    50
    2.3.1  while語句    51
    2.3.2  for語句    52
    2.3.3  循環嵌套    54
    2.3.4  循環中斷與短路控制    56
    2.3.5  窮舉    59
    2.3.6  迭代    61
    2.3.7  確定性模擬    66
    2.3.8  隨機模擬與random模塊    68
    練習2.3    71
    2.4  函數    73
    2.4.1  函數調用、定義與返回    73
    2.4.2  基於函數的變量作用域    77
    2.4.3  函數參數技術    79
    2.4.4  函數標注    83
    2.4.5  遞歸    84
    2.4.6  lambda表達式    88
    練習2.4    89
    2.5  程序異常處理    92
    2.5.1  異常處理的基本思路與異常類型    93
    2.5.2  try-except語句    94
    2.5.3  控制異常捕獲範圍    96
    2.5.4  else子句與finally子句    96
    2.5.5  異常的人工顯式觸發:raise與assert    97
    練習2.5    98
      容器    100
    3.1  序列容器    100
    3.1.1  序列對像的構建    100
    3.1.2  序列通用操作    102
    3.1.3  列表的個性化操作    108
    3.1.4  字符串的個性化操作    111
    3.1.5  字符串編碼與解碼    114
    3.1.6  字符串格式化與format()方法    116
    3.1.7  正則表達式    119
    練習3.1    125
    3.2  無序容器    129
    3.2.1  字典    129
    3.2.2  集合    132
    練習3.2    135
    3.3  迭代器、生成器與推導表達式    138
    3.3.1  迭代器    138
    3.3.2  生成器    139
    3.3.3  推導表達式    144
    練習3.3    147
      面向類的程序設計    150
    4.1  類及其組成    150
    4.1.1  類模型及其語法    150
    4.1.2  類對像、實例對像與__init__ ()方法    152
    4.1.3  小特權原則與對像成員訪問限制    155
    4.1.4  實例方法、靜態方法與類方法    158
    練習4.1    159
    4.2  Python內置的類屬性、方法與函數    161
    4.2.1  內置的類屬性    161
    4.2.2  獲取類與對像特征的內置函數    162
    4.2.3  操作符重載    166
    4.2.4  可定制的內置方法    168
    練習4.2    176
    4.3  類的繼承    178
    4.3.1  類的繼承及其關繫測試    178
    4.3.2  新式類與object    180
    4.3.3  子類訪問父類成員的規則    182
    4.3.4  子類實例的初始化與super    182
    練習4.3    187
      Python數據處理    190
    5.1  Python文件操作    190
    5.1.1  文件對像及其操作過程    190
    5.1.2  文件打開函數open()    192
    5.1.3  文件屬性與方法    195
    5.1.4  文件可靠關閉與上下文處理器    196
    5.1.5  二進制文件的序列化讀寫    197
    5.1.6  文件指針位置獲取與移動    200
    練習5.1    200
    5.2  Python數據庫操作    203
    5.2.1  數據庫與SQL    203
    5.2.2  用pyodbc訪問數據庫    207
    5.2.3  SQLite3數據庫    213
    練習5.2    215
    5.3  文件與目錄管理    216
    5.3.1  文件和目錄管理(os模塊和os.path模塊)    217
    5.3.2  文件壓縮(zipfile模塊)    219
    5.3.3  文件復制(shutil模塊)    221
    練習5.3    221
      Python網絡編程    222
    6.1  Python Socket編程    222
    6.1.1  TCP/IP與Socket    222
    6.1.2  socket模塊與socket對像    226
    6.1.3  TCP的Python Socket編程    228
    6.1.4  UDP的Python Socket編程    231
    練習6.1    232
    6.2  Python WWW應用開發    235
    6.2.1  WWW及其關鍵技術    235
    6.2.2  urllib模塊庫    241
    6.2.3  urllib.parse模塊與URL解析    242
    6.2.4  urllib.request模塊與網頁抓取    244
    6.2.5  網頁提交表單    247
    6.2.6  urllib.error模塊與異常處理    248
    6.2.7  webbrowser模塊    249
    練習6.2    250
      Python GUI開發    252
    7.1  GUI三要素:組件、布局與事件處理    252
    7.1.1  組件與tkinter    252
    7.1.2  布局與布局管理器    256
    7.1.3  事件綁定與事件處理    259
    練習7.1    263
    7.2  GUI程序結構    265
    7.2.1  基於tkinter的GUI開發環節    265
    7.2.2  面向對像的GUI程序框架    268
    練習7.2    270
    7.3  GUI制作示例    270
    7.3.1  Label與Button    270
    7.3.2  Entry與Message    276
    7.3.3  Text與滾動條    280
    7.3.4  選擇框    287
    7.3.5  菜單    293
    練習7.3    296
    附錄A  Python運算符    297
    附錄B  Python內置函數    301
    附錄C  Python標準模塊庫目錄    307
    附錄D  Python 3.0標準異常類結構(PEP 348)    316
    參考文獻    318














    ·V·





    前言
    前 言
    (一)
    在多年從事C語言、C 和Java教學工作中,少不了有學生要求解釋如fun(i ,i )這樣的問題。有時,到外校進行學術交流時,也不乏同行教師問到這個問題。我感覺,能問到這個問題的學生,無疑是好學生。因為,這個問題雖小,但要解釋清楚它,需要涉及非定義行為、賦值表達式的副作用、序列點、程序設計風格等方面的概念,這些概念在相關教材中幾乎不見提到,許多教師也不清楚。更讓我喫驚的是,當我給一位從事了30多年C與C 教學的大學副教授講賦值表達式的副作用時,他竟然回了我一句:“我不這樣認為。”這足以說明問題的嚴重性了。
    實際上,與其說是賦值操作的副作用,不如說是“變量”的副作用。這似乎是一個不可逾越的鴻溝。因為“值的變化”是變量的基本性質。然而,這個問題在Python中被解決了,因為它的數據多數屬於不可變類型。對於不可變類型的變量賦值,就成為引用指向另外一個對像了。這確實是Python的一大突破。Python有許多讓人耳目一新的特點,正是這些特點,使它得到了快速推廣,並贏得廣泛的支持。前    言
    (一)
    在多年從事C語言、C 和Java教學工作中,少不了有學生要求解釋如fun(i ,i )這樣的問題。有時,到外校進行學術交流時,也不乏同行教師問到這個問題。我感覺,能問到這個問題的學生,無疑是好學生。因為,這個問題雖小,但要解釋清楚它,需要涉及非定義行為、賦值表達式的副作用、序列點、程序設計風格等方面的概念,這些概念在相關教材中幾乎不見提到,許多教師也不清楚。更讓我喫驚的是,當我給一位從事了30多年C與C 教學的大學副教授講賦值表達式的副作用時,他竟然回了我一句:“我不這樣認為。”這足以說明問題的嚴重性了。
    實際上,與其說是賦值操作的副作用,不如說是“變量”的副作用。這似乎是一個不可逾越的鴻溝。因為“值的變化”是變量的基本性質。然而,這個問題在Python中被解決了,因為它的數據多數屬於不可變類型。對於不可變類型的變量賦值,就成為引用指向另外一個對像了。這確實是Python的一大突破。Python有許多讓人耳目一新的特點,正是這些特點,使它得到了快速推廣,並贏得廣泛的支持。
    2017年7月19日,IEEE(美國電氣電子工程師學會)出版的旗艦雜志IEEE Spectrum發布了第4屆編程語言交互排行榜。這個排行榜由讀者需求、用戶增速、開源、設計自由度、雇主需求5個子排行榜組成。其中,前4個子排行榜中都是Python力壓群雄,隻有雇主需求一榜位於C和Java之後,排名第三。圖1為IEEE Spectrum 2017 編程語言 Top 10 排名情況。    

    圖1  IEEE Spectrum 2017編程語言Top 10排名情況
    據 IEEE Spectrum介紹,這個排行依據數據記者 Nick Diakopoulos 提供的數據,結合 10 個線上數據源的 12 個標準,對 48 種語言進行了排行。因為不可能顧及每一個程序員的想法,IEEE Spectrum使用多樣化、可交互的指標權重來評測每一種語言的現行使用情況。顯然,這個排行的客觀性、權威性是極高的。
    另一個影響極大的程序設計語言排行榜是TIOBE。TIOBE排行榜是根據互聯網上有經驗的程序員、課程和第三方廠商的數量,並使用搜索引擎(如Google、Bing、百度)以及Wikipedia、Amazon、YouTube統計出排名數據,但隻是反映某個編程語言的熱門程度,並不能說明一門編程語言好不好,也不反映就同一算法使用不同語言編寫時代碼數量多少。表1是其2017年10月發布的Top 10榜單。可以看出,Python雖位居第5,但它有上升趨勢,而前4名均有下降趨勢。
         表1  TIOBE 2017年10月發布的程序設計語言Top 10榜單
    2017年10月
    2016年10月
    變化
    編程語言
    評級/%
    變化/%
    1
    1

    Java
    12.431
    -6.37
    2
    2

    C
    8.374
    -1.46
    3
    3

    C
    5.007
    -0.79
    4
    4

    C#
    3.858
    -0.51
    5
    5

    Python
    3.803
    0.03
    6
    6

    JavaScript
    3.010
    0.26
    7
    7

    PHP
    2.790
    0.05
    8
    8

    Visual Basic .NET
    2.735
    0.08
    9
    11

    Assembly language
    2.374
    0.14
    10
    13

    Ruby
    2.324
    0.32

    (二)
    Python應用廣泛,所包含的內容自然也十分廣泛。但是作為關於Python的基礎教程,不可能把所有內容都包含進來,甚至不可能包含較多的內容,內容選擇非常重要。作者經過反復斟酌,決定采取以Python核心語法為重心,添加關鍵性的、基礎性的應用型內容。後,將應用型內容圈定在數據處理、網絡編程和GUI設計3個方面,並把全書按照進行組織。前為Python的核心語法知識,後為3個應用    方面。
    介紹Python的基本知識,內容包括Python的特點、數據對像、變量、輸入輸出等,使讀者對Python有初步了解。
    為Python程序結構,內容包括選擇結構、循環結構、函數、模塊、異常      處理。
    為容器,內容包括序列容器、無序容器、迭代器、生成器與推導表達式。
    為面向類的程序設計,內容包括類與對像、類與對像的通用屬性與操作、類的繼承。
    為Python數據處理,內容包括文件操作、數據庫操作、文件與目錄管理。
    為Python網絡編程,內容包括Python Socket編程、Python WWW開發。
    為Python GUI開發,內容包括GUI三要素、GUI程序結構、GUI制作     示例。
    著名心理學家皮亞傑創建的結構主義,把教師的主要職責定義為為學習者創建學習環境。作為Python教材,本書把附錄和習題作為正文之外的兩個重要的學習環境。本書的附錄包括Python運算符、Python內置函數、Python標準模塊庫目錄和Python 3.0標準異常類結構。
    除了語言的內核和內置函數,模塊是Python的支撐。在Python中,每一項應用都要由相應的模塊支持。每一個應用程序的開發都需要按照“熟悉領域知識—導入相關模塊—設計相應算法—編寫相應代碼”的過程。由於Python開源代碼的特點和社區廣大熱心者的支持,目前Python已經有上千的模塊可以利用。讀者知道哪些模塊可用,不僅可以開闊思路,而且可以瀏覽這些模塊目錄得到通向該應用領域的線索。不過,要把這些模塊全羅列出來不僅沒有必要,也沒有可能。這是將Python 3.0標準模塊庫目錄作為附錄的原因。雖然僅僅隻有29項,但足可以對Python的應用範圍畫出一個輪廓。
    習題也是重要的學習環境。為此本書收集並設計了多種類型的習題,並且在每節後面都給出相應的練習題。本書習題量雖多,卻還是無法滿足不同的練習需要。希望學習者和使用本書的老師們,不要囿於本書給出的習題,要開發出更多課後練習,開闢更好的Python學習環境。還需要說明的是,不是每一個題目都能直接在正文中找到答案。要找到正確的答案,需要深刻理解基本概念,或需要自己設計一些代碼測試分析。這樣纔能培養出舉一反三的能力、創新的能力。
    本書所有例題都在Python 3.6.1的交互環境中調試。本書也推薦在Python 3.0的交互環境平臺上教學或自學,在交互式環境中學習,有利於立即發現錯誤和理解錯誤原因。為便於閱讀,文中將繫統輸出的內容用藍色印出。其中,藍色粗體為出錯信息(在IDLE中是紅色)。
    (三)
    教材是教學的劇本,是學習的向導。要編寫一本好的教材,不僅需要對本課程涉及內容有深刻的了解和感悟,還要熟悉相關領域的知識,更要不斷探討和深化貫穿其中的教學理念和教育思想,寫教材是件很難的事情。特別是在不斷的寫作中,常感到自己知識和能力的不足。由於是已經有了一些想法纔開始寫作的,又不忍將這些想法隱藏起來,還由於已經得到一些親朋的支持和鼓勵,也不忍辜負他們的一片熱情,隻能硬著頭皮寫下去,也幸有他們的幫助,纔後得以完成本書。在本書的寫作過程中,趙忠孝教授、姚威博士、張展為博士,以及魏士婧、劉硯秋、張秋菊、史林娟、張有明、戴璐、張展赫、吳灼偉(插圖)等參加了有關部分的編寫工作,在此謹表謝意。
    本書就要出版了。它的出版,是我在這項教學改革工作中跨上的一個新臺階。本人衷心希望得到有關專家和讀者的批評與建議,也希望能多結交一些志同道合者,把這本書改得更好。

                                                                 張基溫
                                                       丁酉菊月於穗小海之畔??
    ??

    ??

    ??

    ??



    ·IV·


    ·I·





    在線試讀
    Python數據處理
    今天,人們已經進入信息時代。在信息時代,人類社會的支撐資源已經從物質和能源為中心,轉移到了以信息資源為中心。計算機的主要職能也從早先的“計算”轉移到了以數據處理(data processing)為中心的信息處理。數據是信息的記錄形式。數據處理主要由對數據的采集、存儲、檢索、加工、變換和傳輸等環節組成。這些處理必須以強大的數據存儲為支撐,並且還依賴於機器的速度和軟件的處理方式。迄今為止,數據處理的軟件技術已經呈現出文件繫統和數據庫兩大基本技術平臺。Python作為一種程序設計語言,也具有了對文件技術和數據庫技術的支撐。
    5.1 Python文件操作
    5.1.1 文件對像及其操作過程
    1. 文件及其類型
    文件(file)是建立在外存中的數據容器,由這種容器類可以創建具體的文件實例對像。這種基於外存的容器與基於內存的容器之間的區別在於所存放的內容可以長期保存,不受停電、關機、程序結束的影響。
    文件可以有如下一些分類方法。
    1)按照存儲的內容分類
    按照存儲的內容性質,文件可以分為程序文件和數據文件兩大類。程序文件存儲的內容是程序。Python程序文件以.py為後綴,而數據文件的後綴則以內容和用途等不同而異。
    2)按照讀寫順序分類
    按照讀寫方式,文件分為順序讀寫文件(簡稱順序文件)和隨機讀寫文件(簡稱隨機文件)兩種。順序文件隻能按照先後順序進行讀寫,程序文件就是順序文件。隨機文件可以在文件的任意位置進行讀寫。
    3)按照編碼方式分類  Python數據處理
    今天,人們已經進入信息時代。在信息時代,人類社會的支撐資源已經從物質和能源為中心,轉移到了以信息資源為中心。計算機的主要職能也從早先的“計算”轉移到了以數據處理(data processing)為中心的信息處理。數據是信息的記錄形式。數據處理主要由對數據的采集、存儲、檢索、加工、變換和傳輸等環節組成。這些處理必須以強大的數據存儲為支撐,並且還依賴於機器的速度和軟件的處理方式。迄今為止,數據處理的軟件技術已經呈現出文件繫統和數據庫兩大基本技術平臺。Python作為一種程序設計語言,也具有了對文件技術和數據庫技術的支撐。
    5.1  Python文件操作
    5.1.1  文件對像及其操作過程
    1. 文件及其類型
    文件(file)是建立在外存中的數據容器,由這種容器類可以創建具體的文件實例對像。這種基於外存的容器與基於內存的容器之間的區別在於所存放的內容可以長期保存,不受停電、關機、程序結束的影響。
    文件可以有如下一些分類方法。
    1)按照存儲的內容分類
    按照存儲的內容性質,文件可以分為程序文件和數據文件兩大類。程序文件存儲的內容是程序。Python程序文件以.py為後綴,而數據文件的後綴則以內容和用途等不同而異。
    2)按照讀寫順序分類
    按照讀寫方式,文件分為順序讀寫文件(簡稱順序文件)和隨機讀寫文件(簡稱隨機文件)兩種。順序文件隻能按照先後順序進行讀寫,程序文件就是順序文件。隨機文件可以在文件的任意位置進行讀寫。
    3)按照編碼方式分類
    按照編碼方式,數據文件分為文本文件(text file)和二進制文件(binary file)兩種。它們以文件名後綴相區分,文本文件的文件名後綴為.txt,二進制文件的文件名後綴為.dat。
    文本文件以字符為單位進行存儲,即文本文件是字符串組成的文件。純文本文件(txt文件)、HTML文件和XML文件都是常見的文本文件。文本文件的存儲與解釋,與采用的編碼方式有關,並且需要編碼/解碼環節。早的編碼采用ASCII,用1B(8b)表示一個字符。後來出現了Unicode編碼,用4B(32b)表示一個字符。ASCII占用的存儲空間小,但能表示的字符數量少。Unicode表示的符號數量達100多萬個(囊括了世界上絕大部分語言文字),但是占用的存儲空間也很大。為此人們開發出了UFT-8,它可以根據符號的種類自動選擇編碼的長短,例如,用1B表示英文字符,用3B(24b)表示中文文字等。Python 3.0以後開始全面支持Unicode,並能夠自動對文本進行UFT-8編碼和解碼處理。
    二進制文件以字節為單位進行存儲,即二進制文件是字節串組成的文件。一般不可顯示的數據,如音頻、圖像、視頻等數據都以二進制文件存儲。對二進制文件的操作,不需要任何形式的編碼和解碼處理。為了將音頻、圖像、視頻等信號轉變為字節串,需要專門的軟件。這些軟件可以由一些序列化模塊提供,如struct、pickle、json、marshal、shelve等。
    4)按照緩衝區的使用情況分類
    緩衝區是內存中的一個區域,它一端連接CPU,另一端連接外部存儲設備。如圖5.1所示,緩衝區分為輸入緩衝區和輸出緩衝區。

    圖5.1  數據文件與緩衝區
    文件緩衝區可以提高高速設備的效率。因為CPU是高速設備,外部存儲器是低速設備。若兩種設備直接連接進行數據交換,必然要使高速設備按照低速設備的速度工作,這樣就大大降低了高速設備的使用效率。在兩者之間增加一個緩衝區,使高速設備隻在需要時纔與緩衝區打交道,其他時間可以從事別的工作,從而大大提高了使用效率。這樣也就避免頻繁地啟動低速的外部存儲設備。外部存儲設備一般采用磁盤存儲器。磁盤存儲器每一次讀寫都要移動磁頭並尋找磁道扇區。使用緩衝區,可以將要寫入磁盤的數據裝滿緩衝區後纔一起送到磁盤,不用則每一次讀寫操作都要啟動一次磁頭。
    文件操作比較依賴操作繫統的I/O控制。通常標準I/O可以提供3種類型的緩衝區。
    (1)全緩衝區。這種緩衝方式要求填滿整個緩衝區後纔進行I/O繫統調用操作。對於磁盤文件的操作通常使用全緩衝的方式訪問。
    (2)行緩衝區。在這種情況下,當在輸入和輸出中遇到換行符時,標準I/O庫函數將會執行繫統調用操作。當所操作的流涉及一個終端時(例如標準輸入和標準輸出),使用行緩衝方式。因為標準I/O庫每行的緩衝區長度是固定的,所以隻要填滿了緩衝區,即使還沒遇到換行符,也會執行I/O繫統調用操作。
    (3)無緩衝區。無緩衝區是指不進行緩存,直接調用繫統調用。
    2. 文件對像
    在Python中,一切皆對像。對於文件操作來說,程序要創建的“對像”並非文件,而是應用程序與要讀寫的文件之間的通道。這個通道在Windows繫統中稱為文件句柄(file handle),在UNIX/Linux繫統中稱為文件描述符,也可以將其統稱為文件標簽。通過它,可以獲取或建立文件的有關信息。隻有這個通道建立了,纔能有效地進行文件的讀寫等  操作。
    此外,在創建文件對像的同時,繫統還會自動創建3個標準I/O對像。
    (1)stdin(標準輸入)。
    (2)stdout(標準輸出)。
    (3)stderr(標準錯誤輸出)。
    這3個對像都與終端連接,可以方便數據的輸入與輸出。
    3. 文件對像的操作過程
    不管是文本文件,還是二進制文件,它們的操作過程大體上都分為三步:創建文件對像(即打開文件)、文件讀寫等操作和關閉文件。
    1)打開文件
    打開文件是創建文件對像的操作,如上所述,創建了文件對像,就拿到了操作繫統對這次文件操作的令牌——文件句柄或文件描述符,就可以獲得對文件進行操作的權限,以及可以使用的緩衝區。
    2)文件操作
    文件對像創建之後,就可以對文件進行操作了。操作內容的核心是讀寫。讀就是從外存中將數據讀到內存程序中,寫就是將程序中的數據寫向外存。
    3)關閉文件
    如前所述,在文件操作時,各種操作的數據都會首先保存在緩衝區中,除非緩衝區滿或執行關閉操作,否則不會將緩衝區中的內容寫到外存。文件關閉操作的主要作用是將留在緩衝區的信息後一次寫入外存,切斷程序與外存中該文件的通道。如果不執行文件關閉——關閉文件標簽,就停止程序運行,就有可能丟失信息。
    文件關閉要使用文件對像的方法close()。
    5.1.2  文件打開函數open()
    1.open()的語法
    通常,把文件對像的創建形像地稱為文件打開。在Python中,常用的文件打開方式是使用Python的內置函數open()。它執行後創建一個文件對像和3個標準I/O對像,並返回一個文件描述符(句柄)。其語法如下。

    open(filename[,mode[,buffering[,encoding[,errors[, newline[,closefd=True]]]]]])

    2. 參數說明
    1)filename:文件名
    filename是要打開的文件名,是open()函數中不可或缺的參數。通常,上述filename是包含了文件存儲路徑在內的完整文件名。隻有被打開的文件位於當前工作路徑下時,纔可以忽略路徑部分。
    為了把文件建立在特定位置,可以在交互環境下用os模塊中的os.mkdir()函數。
    代碼5-1  創建一個文件夾。

    >>> import os
    >>> os.mkdir(('D:\\myPythonTest'))

    如果在給定路徑或當前路徑下找不到指定的文件名,將會觸發IOError。
    2)mode:文件打開的模式
    文件打開時需要指定打開模式。打開模式主要用於向繫統請求下列資源。
    (1)打開後是進行文本文件操作(以't'表示),還是二進制文件操作(以'b'表示),以便繫統進行相應的編碼配置。
    (2)打開後是要進行讀操作(以'r'或缺省表示),還是寫操作(以'w'表示覆蓋式從頭寫,用'a'表示在文件尾部追加式寫)或讀寫操作(以' '表示),以便繫統為其配備相應的緩衝區、建立相應的標準I/O對像並初始化文件指針位置是在文件頭('r'或缺省、'w'),還是在文件尾('a')。
    (3)用'U'表示以通用換行符模式打開。一般說來,不同平臺用來表示行結束的符號是不同的, 例如 \
    、\
    , 或者 \
    \
    。如果隻寫一種處理換行符的方法,就無法被其他平臺認可,若要為每一個平臺都寫一個方法又太麻煩了。為此,Python 2.3 創建了一個特殊換行符newline(\
    )。當使用 'U' 標志打開文件時,所有的行分隔符(或行結束符,無論它原來是什麼)通過 Python 的輸入方法(例如read())返回時都會被替換為newline(\
    ),同時還用對像的 newlines 屬性記錄它曾“看到的”文件的行結束符。
    上述基本的打開模式符號可以組合成表5.1所示的文件打開模式。
    表5.1  組合的文件打開模式
    文件打開模式
    操 作 說 明
    文本文件
    二進制文件

    r
    rb
    以隻讀方式打開,是默認模式,必須保證文件存在
    rU 或 Ua

    以讀方式打開文本文件, 同時支持文件含特殊字符(如換行符)
    w
    wb
    以寫方式新建一個文件,若已存在則自動清空
    a
    ab
    以追加模式打開:若文件存在,則從 EOF 開始寫;若文件不存在,則創建新文件寫
    r
    rb
    以讀寫模式打開
    w
    wb
    以讀寫模式新建一個文件(參見 w)
    a
    ab
    以讀寫模式打開(參見 a)

    3)buffering:設置buffer
    0:代表buffer關閉(隻適用於二進制模式)。
    1:代表line buffer(隻適用於文本模式)。
    >1:表示初始化的buffer大小。
    若不提供該參數或者給定負值,則按照如下繫統默認緩衝機制進行。
    (1)二進制文件使用固定大小緩衝區。緩衝區大小由io.DEFAULT_BUFFER_SIZE指定,一般為4096B或8192B。
    (2)對文本文件,若isatty()返回True,使用行緩衝區;其他與二進制文件相同。
    4)errors:報錯級別
    strict:字符編碼出現問題時會報錯。
    ignore:字符編碼出現問題時程序會忽略而過,繼續執行下面的代碼。
    5)closefd:傳入參數
    True:傳入的file參數為文件的文件名(缺省值)。
    False:傳入的file參數隻能是文件描述符。
    Ps:文件描述符,一個非負整數。
    注意:使用open打開文件後一定要記得關閉文件對像。
    6)其他
    encoding:返回數據的編碼(一般為UTF-8或GBK)。
    newline:用於區分換行符(隻對文本模式有效,可以取的值有None、'\
    '、'\
    '、''、'\
    \
    ')。
    3. 文件打開示例
    代碼5-2  文件打開示例。

    >>> import os
    >>> os.mkdir('D:\\myPythonTest')                    #創建一個文件夾
    >>> f = open(r'D:\\\\myPythonTest\est1.txt','w')    #以寫方式打開f
    >>> f.write('Python\
    ')                            #寫入一行
    7
    >>> f.close()                                    #文件關閉
    >>> f = open(r'D:\\\\myPythonTest\est1.txt','r')    #以讀方式打開
    >>> f.read()                                    #讀出剩餘內容
    'Python\
    '
    >>> f.write('how are you?\
    ')                    #企圖在讀模式下寫,導致錯誤
    Traceback (most recent call last):
      File "", line 1, in
        f.write('abcdefg\
    ')
    io.UnsupportedOperation: not writable
    >>> f.close()                                    #關閉文件
    >>> f = open(r'D:\\\\myPythonTest\est1.txt','a')    #為追加打開
    >>> f.write('how are you?\
    ')                    #追加模式下寫
    13
    >>> f.close()                                    #關閉文件
    >>> f = open(r'D:\\\\myPythonTest\est1.txt')        #以默認(讀)方式打開文件
    >>> f.read(20)                                #讀出20個字符
    'Python\
    how are you?\
    '
    >>> f.close()                                    #關閉文件
    >>> f.read()                                    #文件關閉之後操作
    Traceback (most recent call last):
      File "", line 1, in
        f.read()
    ValueError: I/O operation on closed file.

    說明:
    (1)在字符串前面添加符號r,表示使用原始字符串。
    (2)不按照打開模式操作,會導致io.UnsupportedOperation錯誤。
    (3)一個文件在關閉後還對其進行操作會產生ValueError。
    5.1.3  文件屬性與方法
    1. 文件屬性
    文件對像一經創建,就擁有了自己的屬性,文件對像的主要屬性如表5.2所示。
    表5.2  文件對像的主要屬性(f表示文件對像)
    文件對像的屬性
    描    述
    f.closed
    文件已經關閉,為True;否則,為False
    f.mode
    文件的打開模式
    f.name
    文件的名稱
    f.encoding
    (文本)文件所使用的編碼
    f.newlines
    文件中用到的換行模式:無,返回None;隻一種,返回一字符串;有多種,返回所遇到行組
    f.softspace
    如果空間明確要求具有打印,返回False;否則,返回True

    其中:
    (1)f.encoding為文件所使用的編碼:當 Unicode 字符串被寫入數據時, 將自動使用f.encoding 轉換為字節字符串;若f.encoding為None時,使用繫統默認編碼。
    (2)f.softspace為 0 表示在輸出一數據後,要加上一個空格符;為1 表示不加。這個屬性一般程序員用不著,由程序內部使用。
    2. 文件方法
    表5.3為文件對像的常用內置方法。在文件對像方法中,關鍵的兩類方法是文件對像的關閉方法 close()和文件對像讀寫方法。
    表5.3  文件對像的常用內置方法(f表示文件對像)
    文件對像的方法
    操    作

    f.read([size=-1])
    從文件讀取size個字節(Python 2)或字符(Python 3);size缺省或為負,讀取所有剩餘內容

    f.readline([size=-1])
    從文件中讀取並返回一行(包括行結束符),如果size有定義則返回size個字符

    f.readlines([size])
    讀出所有行組成的list,size為讀取內容的總長

    f.write(str)
    將字符串str寫入文件

    f.writelines(seq)
    向文件寫入字符串序列seq,不添加換行符。seq應該是一個返回字符串的可迭代對像


    f.tell()
    獲得文件指針當前位置(以文件的開頭為原點)

    f.seek(offset[,where])
    從where(0:文件開始;1:當前位置;2:文件末尾)將文件指針偏移offset字節



    f.flush()
    把緩衝區的內容寫入硬盤,刷新輸出緩存

    f.close()
    刷新輸出緩存,關閉文件,否則會占用繫統的可打開文件句柄數

    f.truncate([size])
    截取文件,隻保留size 字節

    f.isatty()
    文件是否一個終端設備文件(UNIX繫統中):是,返回True;否,返回False

    f.fileno()
    獲得文件描述符——?一個數字
    5.1.4  文件可靠關閉與上下文處理器
    一個文件操作以後,不能關閉,將會造成信息丟失。盡管Python有良好的垃圾收集機制,會自動處理沒有關閉的文件。但是,好還是養成顯式關閉文件的習慣,並且好能有使文件可靠關閉的機制。下面介紹兩種可靠關閉機制。
    1. 將文件關閉寫在異常處理的finally子句中
    文件操作中會發生異常,包括文件無法打開以及讀寫失敗。為此需要異常處理。由於異常處理的finally子句是必須執行的子句,所以將close()函數寫在finally子句中,一定可以可靠關閉。
    代碼5-3  將close()寫在finally子句中的文件可靠關閉示例。

    try:
        f = open('D:\\\\mycode\est.txt')
        #文件處理操作
    Except IOError as e:
        print(e)
        exit()
    finally:
        f.close()

    2. 使用上下文管理器
    為了能可靠地關閉打開的文件,包括在異常情況下關閉打開的文件,除了把close()方法放到finally子句中外, Python還提供了一個更好的辦法——上下文管理器(context manager)。
    1)上下文管理器的應用場合
    在編程中,經常會踫到這種情況:某一個特殊的語句塊,在執行這個語句塊之前需要先執行一些準備操作,而當該語句塊執行完成後,還需要執行一些後續的收尾動作。文件操作就是這樣的語句塊:執行文件操作,首先需要獲取文件句柄,當執行完相應的操作後,需要執行釋放文件句柄的動作。這是一種必需的上下文關繫。
    對於這種情況,Python中提供了上下文管理器的概念,可以通過上下文管理器來定義/控制代碼塊執行前的準備動作,以及執行後的收尾動作。
    2)with語句
    在Python中,可以通過with語句來方便地使用上下文管理器。with語句的語法如下。

    with context_expr [as var]:
    with_suite

    其中:
    context_expr是支持上下文管理協議的對像,也就是上下文管理器對像,負責維護上下文環境。
    as var是一個可選部分,通過變量方式保存上下文管理器對像。
    with_suite是需要放在上下文環境中執行的語句塊。
    在Python的內置類型中,很多類型都是支持上下文管理協議的,文件就是其中之一。在支持上下文管理協議的地方使用with,比異常處理簡單多了,並可以增強代碼的健壯性。
    當需要操作一個文件時,使用with語句,可以保證繫統能夠自動關閉打開的流。
    代碼5-4  使用with示例。

    >>> with open(r'D:\\\\mycode\est2.txt','w') as f2:
        f2.writelines(['Python\
    ','programming\
    '])
        f2.write('good bye\
    ')

    9
    >>> f2.closed                        #測試文件對像f2是否關閉
    True

    說明:closed是文件對像的一個屬性,用於記錄文件關閉的狀態:True為已經關閉,False為沒有關閉。從上述代碼可以看出,當代碼執行完with語句後,文件對像f2就被自動關閉了。
    5.1.5  二進制文件的序列化讀寫
    Python二進制文件主要用於圖像、視頻和音頻等數據的保存,也常用於數據庫文件、WPS文件和可執行文件。所有這些應用中,數據都是以對像的形式提供的,並以字節串的形式存放。這樣,在向文件寫數據時,就需要把內存中的數據對像,在不丟失其類型信息的情況下,轉換成對像的二進制字節串。這一過程稱為對像序列化(object serialization)。相對而言,在讀取時,就要把二進制字節串準確地恢復成原來的對像,以供程序使用或顯示出來。這一過程稱為反序列化。Python本身沒有這些內置功能,要靠一些序列化模塊實現。常用的序列化模塊有struct、pickle、json、marshal、PyPerSyst和shelve等。它們由不同的團隊開發,設計思路和使用方法各有特色。下面僅介紹其中兩種,供讀者品味。
    1.pickle模塊
    準確地說,Python的pickle實際上是一個對像永久化(object persistence)模塊。對像序列和反序列化是其實現對像持久化的兩個接口,分別用pickle.dump()和pickle.load()接口實現。
    1)pickle.dump()接口
    pickle.dump()接口的語法如下。

    pickle.dump(obj, file, [,protocol])

    pickle.dump()的功能是將對像obj轉換成字節串寫到文件對像file中。為此,要求file必須有write()接口,可以是一個以'wb'方式打開的文件或者是一個StringIO對像或者其他任何實現write()接口的對像。
    protocol為序列化使用的協議版本,0:ASCII協議,所序列化的對像使用可打印的ASCII碼表示;1:舊式的二進制協議;2:2.3版本引入的新二進制協議,較以前的更高效。其中協議0和1兼容舊版本的Python。Protocol的默認值為0。
    代碼5-5  pickle.dump()應用示例。

    >>> import pickle
    >>> class Person:
    .    def __init__(self,name,age):
            self.name = name
            self.age = age
        def show(self):
            print(self.name "_" str(self.age))
        
    >>> aa = Person("Zhang", 20);    aa.show()
    Zhang_20

    2)pickle.load(file)
    pickle.load()的語法如下。

    pickle.load(file)

    pickle.load()的功能是將文件中的數據解析為一個Python對像。
    代碼5-6  pickle.load()應用示例。

    >>> import pickle
    >>> with open('d:\\\\p.dat','rb') as f:
        bb = pickle.load(f)

    >>> bb.show()
    Zhang_20

    顯然,采用pickle模塊,就不再需要write()和read()兩個方法了,它的dump()和load()方法既完成了格式轉換,又進行了讀寫。
    2.struct模塊
    在進行二進制文件讀寫時,采用struct模塊僅僅是用它的兩個函數進行數據的打包(pack)和解包(unpack),讀寫還需要使用文件對像的讀寫方法。這與采用pickle模塊有一些不同。所以,使用struct模塊進行二進制文件讀寫,就要搞清它的打包原理。
    1)struct的概念
    struct是C語言提供的一種組合數據類型,用於把不同類型的數據組織成一種數據類型,有點類似於類實例的屬性。Python的struct模塊就是按照這種模式來把一個或幾個數據組織起來進行打包變換再寫入;相對而言,讀出後,還要進行解包處理纔可以交給程序使用。
    2)標記一個struct的結構
    為了解包時恢復原來組成struct的數據類型,必須用一個字符串記下它們原來的類型。為此要使用規定的類型符進行簡潔標記。表5.4為與Python 3數據相關的struct支持的主要類型標記符。
    表5.4  與Python數據相關的struct支持的類型標記符
    類型符
    Python類型
    字節數
    類型符
    Python類型
    字節數
    x
    None
    1
    Q
    float
    8
    ?
    bool
    1
    f
    float
    4
    i、I、L
    integer
    4
    q、Q
    interger
    8
    b、B
    inter
    1
    s、p
    string

    h、H
    integer
    2




    說明:
    (1)q和Q隻在機器支持64位操作時有意義。
    (2)每個格式前可以有一個數字,表示個數。
    (3)s格式表示一定長度的字符串,例如,4s表示長度為4的字符串。
    例如,一個職員的struct,包含如下數據:

    name = 'Zhang'
    age = 35
    wage = 3456.78

    由於字符串可以直接寫,所以隻需對struct中的整型、浮點型標記為empfmt ='if?'。
    3)打包成字節串對像
    打包用s







     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部