Python實戰(zhàn)之數(shù)據(jù)庫應用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第1頁
Python實戰(zhàn)之數(shù)據(jù)庫應用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第2頁
Python實戰(zhàn)之數(shù)據(jù)庫應用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第3頁
Python實戰(zhàn)之數(shù)據(jù)庫應用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第4頁
Python實戰(zhàn)之數(shù)據(jù)庫應用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

文件讀寫第八章新工科建設之路·數(shù)據(jù)科學與大數(shù)據(jù)系列Python實戰(zhàn)之數(shù)據(jù)庫應用和數(shù)據(jù)庫獲取1with語句1.with語句在開始文件讀寫操作前,先了解with語句的工作原理。有些任務,可能事先需要設置,事后做清理工作。對于這種場景,Python的with油語句提供了一種非常方便的處理方式。一個很好的例子是文件處理獲取一個文件句柄,從文件中讀取數(shù)據(jù),然后關閉文件句柄。如以下示例代碼:這里有兩個問題:①可能忘記關閉文件句柄:②文件讀取數(shù)據(jù)發(fā)生異常,沒有進行任何處理。對這兩個問題做如下異常處理:1.with語句這段代碼可以良好地運行,但是比較冗長。這時用with語句可以更優(yōu)雅地來處理,還可以很好地處理上下文環(huán)境產(chǎn)生的異常。代碼更改如下:代碼段變得更加優(yōu)雅簡潔了(具體見with_theroy_0.py文件)。with工作原理如下:①緊跟with后面的語句被求值后,返回對象的enter()方法被調(diào)用,其返回值將被賦值給as后面的變量。②當with后面的代碼塊全部被執(zhí)行完,將調(diào)用前面返回對象的exit()方法。1.with語句通過如下代碼進行理解(with_theory_1.py):執(zhí)行代碼,得到結果如下:1.with語句示例wit_theory_1.py文件中Sample類的_exit()方法有3個參數(shù):val、type和trace。這些參數(shù)在異常處理中相當有用。對該示例的代碼稍作修改,可以進一步了解with是如何工作的,此處不展開講解,可以查看相關PY文件(with_theory_2.py)。正如我們看到的:①enter方法被執(zhí)行。②enter()方法返回的值是“Foo”,賦值給變量“sample”。③執(zhí)行代碼,打印變量“sample”的值為“Foo”。④exit()方法調(diào)用with的真正強大之處是它可以處理異常。2TXT文件讀寫2.TXT文件讀寫

TXT文件又稱為純文本文件,一般指以xt為后綴的文件。TXT文件的讀寫操作比較簡單,直接看示例代碼即可明白。為便于本章內(nèi)容的講解,這里提前準備了一些基礎數(shù)據(jù),作為本章各節(jié)做文本處理展示操作結果使用,基礎數(shù)據(jù)文件路徑為chapter8/file_read/les。從Github把代碼clone后,在該路徑下存放提供好的基礎數(shù)據(jù)文件,同時各種文件讀寫的源碼會存放于chapter8/file_read文件夾下。先看讀取TXT文件的示例代碼(read_txt.py):2.TXT文件讀寫該示例代碼比較簡單,此處不展示執(zhí)行結果。需要補充說明的一點是,代碼中使用了os.getcwd(),意為獲取當前工作目錄路徑。2.TXT文件讀寫

TXT文件的寫入也比較簡單,以下示例將先從給定的TXT文件中讀取數(shù)據(jù),對指定數(shù)據(jù)適當處理后,將處理結果寫入指定TXT文件中,write()方法向一個文件中寫入數(shù)據(jù)。示例代碼如下(write_txt.py):2.TXT文件讀寫2.TXT文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會在chapter8/ile_read/files文件夾下生成一個名為writetxtfile.txt的文件,其中寫入了對應格式的數(shù)據(jù)。TXT是包含極少格式信息的文件,并沒有明確的定義,通常是指那些能夠被系統(tǒng)終端或者簡單的文本編輯器接受的格式。任何能讀取文本的程序都能讀取TXT文件,因此通常認為這種文件是通用的、跨平臺的。由于結構簡單,TXT文件被廣泛用于記錄信息。在實際生產(chǎn)應用中,更多的是向TXT文件中寫入數(shù)據(jù),一般日志文件都以TXT或LOG文件為多,能夠避免其他文件讀寫時遇到的一些問題。此外,當文本文件中的部分信息出現(xiàn)錯誤時,往往能夠容易地從錯誤中恢復,并繼續(xù)處理其余內(nèi)容。3CSV文件讀寫3.CSV文件讀寫逗號分隔值(Comma-SeparatedValue,CSV),有時也稱為字符分隔值,因為分隔字符也可以不是逗號。CSV文件以純文本形式存儲表格數(shù)據(jù)(數(shù)字和文本)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。所有記錄都有完全相同的字段序列,通常是純文本文件。

3.CSV文件讀寫CSV文件的規(guī)則如下:①開頭不留空,以行為單位。②可含或不含列名,含列名則居文件第一行。③一行數(shù)據(jù)不跨行,無空行。④以半角逗號(,)作分隔符,列為空也要表達其存在。⑤列內(nèi)容如存在半角引號(''),則替換成半角雙引號("")轉義,即用半角雙引號("")將該字段值包含。⑥文件讀寫時,引號、逗號操作規(guī)則互逆。⑦內(nèi)碼格式不限,可為ASCI、Unicode或者其他。⑧不支持特殊字符。3.CSV文件讀寫讀取CSV文件時,開頭不留空,以行為單位:可含或不含列名,含列名放第一行。讀取CSV文件需要導入csv模塊,示例代碼如下(read_csv.py):3.CSV文件讀寫讀取CSV文件時,開頭不留空,以行為單位:可含或不含列名,含列名放第一行。讀取CSV文件需要導入csv模塊,示例代碼如下(read_csv.py):3.CSV文件讀寫執(zhí)行該PY文件,即可打印從指定文件中讀取的數(shù)據(jù)。CSV文件的寫入也需要導入csv模塊,以下示例(write_csv.py)將先從給定的CSV文件中讀取數(shù)據(jù),對指定數(shù)據(jù)做適當處理后,將處理結果寫入指定CSV文件中。3.CSV文件讀寫3.CSV文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會在chapter8/ile_read/.fles文件夾下生成一個名為csv_write.csv的文件,其中寫入了對應格式的數(shù)據(jù)。在實際應用中,CSV文件的讀寫都比較多,特別在數(shù)據(jù)清洗過程中會更多地應用CSV文件來做數(shù)據(jù)的載體。比如,從Hive導出數(shù)據(jù)一般選擇將Hive中的數(shù)據(jù)批量導入CSV文件,再通過讀取CSV文件批量導入數(shù)據(jù)庫。因為通過一個中間文件作為載體,可以快速地向數(shù)據(jù)庫中插入大批量數(shù)據(jù)。比如,將5GB的數(shù)據(jù)插入MySQL,若直接從Hive查詢數(shù)據(jù)導入MySQL,要5小時以上,而通過中間文件,從Hive將數(shù)據(jù)寫入CSV文件耗時為半小時左右,再從CSV文件將數(shù)據(jù)批量導入MySQL,耗時也僅為半小時左右,整個過程耗時1小時左右,速度提升80%以上。4JSON文件讀寫4.JSON文件讀寫

JSON是JavaScript的子集,專門用于指定結構化的數(shù)據(jù)。JSON是輕量級的數(shù)據(jù)交換方式,以人們更易讀的方式傳輸結構化數(shù)據(jù)。JSON對象非常像Python的字典。JSON文件的讀操作需要導入json模塊。示例如下(read_json.py):4.JSON文件讀寫執(zhí)行該PY文件,即可打印從指定文件中讀取的數(shù)據(jù)。JSON文件的寫操作也需要導入json模塊,以下示例(write_json.py)將先從給定的JSON文件中讀取數(shù)據(jù),對指定數(shù)據(jù)做適當處理后,將處理結果寫入指定JSON文件中。4.JSON文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會在chapter8/ileread/fles文件夾下生成一個名為write_json_file.json的文件,其中寫入了對應格式的數(shù)據(jù)。5Word文件讀寫5.Word文件讀寫

DOC或DOCX文件是我們常見的Word文件,一般以文章、新聞報道和小說這類文字內(nèi)容較長的數(shù)據(jù)為主。Python讀寫Word文件需要第三方庫擴展支持,需要做如下安裝:讀取Word文件一般需要如下幾個步驟:(1)生成Word對象,并指向Word文件。(2)使用paragraphs0獲取Word對象全部內(nèi)容。(3)循環(huán)paragraph對象,獲取每行數(shù)據(jù)并寫入列表。(4)將列表轉換為字符串,每個列表元素使用換行符連接。轉換后,數(shù)據(jù)的段落布局與Word文件相似。5.Word文件讀寫讀取Word文件需要導入docx模塊。操作示例如下(read_word.py):5.Word文件讀寫執(zhí)行該PY文件,即可打印從指定文件中讀取的數(shù)據(jù)。Word文件寫入一般需要如下幾個步驟:(1)創(chuàng)建生成臨時Word對象。(2)分別使用add_paragraph()和add_heading()對Word對象添加標題和正文內(nèi)容。(3)如果設置正文內(nèi)容的字體加粗和斜體等,那么可以將正文內(nèi)容對象的屬性runs[0].bold和add_run('XX').italic設置為True.(4)如果插入圖片和添加表格,那么可以在Word對象中使用add-picture()和add_table()方法。(5)完成數(shù)據(jù)寫入,需要將Word對象保存為Word文件。5.Word文件讀寫Word文件寫入也需要導入docx模塊。操作示例如下(write_word.py):5.Word文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會在chapter8/ile_read/les文件夾下生成一個名為demo.docx的文件,其中寫入了對應格式的數(shù)據(jù)。6XML文件讀取6.XML文件讀取可擴展標記語言(eXtensibleMarkupLanguage,XML)是一個比較老的結構化數(shù)據(jù)格式,是“純文本”格式,用來表示結構化的數(shù)據(jù)。盡管ML是純文本的,但如果沒有解析器的幫助,幾乎難以辨認。XML文件讀取需導入xml.dom.minidom模塊。操作示例如下(read_xml.py):6.XML文件讀取6.XML文件讀取7CSV文件讀取后插入MYSOL數(shù)據(jù)庫7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫前面講解了文本文件的數(shù)據(jù)讀取及數(shù)據(jù)寫入,本節(jié)將介紹如何將從CSV文件讀取的數(shù)據(jù)插入MySQL數(shù)據(jù)庫。使用SQLAlchemy操作數(shù)據(jù)庫,在chapter8/database文件夾下存放數(shù)據(jù)庫表操作對象及數(shù)據(jù)庫連接文件。數(shù)據(jù)庫表創(chuàng)建文件示例代碼如下(model_create.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫執(zhí)行該PY文件,在數(shù)據(jù)庫data_school中會創(chuàng)建一個名為basic_info的表。數(shù)據(jù)庫表操作對象示例代碼如下(model_obj.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫數(shù)據(jù)庫連接示例代碼如下(sqlalchemy_conn.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫數(shù)據(jù)庫連接示例代碼如下(sqlalchemy_conn.py):①按行讀取數(shù)據(jù)插入MySQL。按行讀取,從CSV文件每讀取一行數(shù)據(jù),就往數(shù)據(jù)庫中插入一條記錄。示例代碼如下(sqlalchemy_csv_insert_mysql.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫執(zhí)行該PY文件,得到如下執(zhí)行結果:插入2000條記錄,耗時254.64556503295898s.由執(zhí)行結果看到,以按行讀取插入數(shù)據(jù)庫的方式,讀取并插入2000條記錄耗時為254s左右,即平均每秒不到10條。這個耗時與計算機性能有一定關系,但相差不會太大。②批量讀取數(shù)據(jù)插入MySQL:從CSV文件中讀取一定量的數(shù)據(jù)后,如1000條,以批量方式插入數(shù)據(jù)庫。示例代碼如下(sqlalchemy_batchinsert_mysql.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫執(zhí)行該PY文件,得到如下執(zhí)行結果:由執(zhí)行結果看到,通過批量插入的方式,讀取并插入2000條記錄耗時1.8s左右,比按行讀取并插入快了100多倍。在實際應用中,遇到大批量數(shù)據(jù)需要從文本文件導入數(shù)據(jù)庫時,首選批量處理方式,還可以使用多線程或多進程方式加快導入速度。8CSV文件讀取后插入MongoDB數(shù)據(jù)庫8.CSV文件讀取后插入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論