![Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第1頁(yè)](http://file4.renrendoc.com/view/d52204c9a013b0c29b99fdc47a03551e/d52204c9a013b0c29b99fdc47a03551e1.gif)
![Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第2頁(yè)](http://file4.renrendoc.com/view/d52204c9a013b0c29b99fdc47a03551e/d52204c9a013b0c29b99fdc47a03551e2.gif)
![Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第3頁(yè)](http://file4.renrendoc.com/view/d52204c9a013b0c29b99fdc47a03551e/d52204c9a013b0c29b99fdc47a03551e3.gif)
![Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第4頁(yè)](http://file4.renrendoc.com/view/d52204c9a013b0c29b99fdc47a03551e/d52204c9a013b0c29b99fdc47a03551e4.gif)
![Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)獲取 課件 【Ch08】文件讀寫_第5頁(yè)](http://file4.renrendoc.com/view/d52204c9a013b0c29b99fdc47a03551e/d52204c9a013b0c29b99fdc47a03551e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
文件讀寫第八章新工科建設(shè)之路·數(shù)據(jù)科學(xué)與大數(shù)據(jù)系列Python實(shí)戰(zhàn)之?dāng)?shù)據(jù)庫(kù)應(yīng)用和數(shù)據(jù)庫(kù)獲取1with語句1.with語句在開始文件讀寫操作前,先了解with語句的工作原理。有些任務(wù),可能事先需要設(shè)置,事后做清理工作。對(duì)于這種場(chǎng)景,Python的with油語句提供了一種非常方便的處理方式。一個(gè)很好的例子是文件處理獲取一個(gè)文件句柄,從文件中讀取數(shù)據(jù),然后關(guān)閉文件句柄。如以下示例代碼:這里有兩個(gè)問題:①可能忘記關(guān)閉文件句柄:②文件讀取數(shù)據(jù)發(fā)生異常,沒有進(jìn)行任何處理。對(duì)這兩個(gè)問題做如下異常處理:1.with語句這段代碼可以良好地運(yùn)行,但是比較冗長(zhǎng)。這時(shí)用with語句可以更優(yōu)雅地來處理,還可以很好地處理上下文環(huán)境產(chǎn)生的異常。代碼更改如下:代碼段變得更加優(yōu)雅簡(jiǎn)潔了(具體見with_theroy_0.py文件)。with工作原理如下:①緊跟with后面的語句被求值后,返回對(duì)象的enter()方法被調(diào)用,其返回值將被賦值給as后面的變量。②當(dāng)with后面的代碼塊全部被執(zhí)行完,將調(diào)用前面返回對(duì)象的exit()方法。1.with語句通過如下代碼進(jìn)行理解(with_theory_1.py):執(zhí)行代碼,得到結(jié)果如下:1.with語句示例wit_theory_1.py文件中Sample類的_exit()方法有3個(gè)參數(shù):val、type和trace。這些參數(shù)在異常處理中相當(dāng)有用。對(duì)該示例的代碼稍作修改,可以進(jìn)一步了解with是如何工作的,此處不展開講解,可以查看相關(guān)PY文件(with_theory_2.py)。正如我們看到的:①enter方法被執(zhí)行。②enter()方法返回的值是“Foo”,賦值給變量“sample”。③執(zhí)行代碼,打印變量“sample”的值為“Foo”。④exit()方法調(diào)用with的真正強(qiáng)大之處是它可以處理異常。2TXT文件讀寫2.TXT文件讀寫
TXT文件又稱為純文本文件,一般指以xt為后綴的文件。TXT文件的讀寫操作比較簡(jiǎn)單,直接看示例代碼即可明白。為便于本章內(nèi)容的講解,這里提前準(zhǔn)備了一些基礎(chǔ)數(shù)據(jù),作為本章各節(jié)做文本處理展示操作結(jié)果使用,基礎(chǔ)數(shù)據(jù)文件路徑為chapter8/file_read/les。從Github把代碼clone后,在該路徑下存放提供好的基礎(chǔ)數(shù)據(jù)文件,同時(shí)各種文件讀寫的源碼會(huì)存放于chapter8/file_read文件夾下。先看讀取TXT文件的示例代碼(read_txt.py):2.TXT文件讀寫該示例代碼比較簡(jiǎn)單,此處不展示執(zhí)行結(jié)果。需要補(bǔ)充說明的一點(diǎn)是,代碼中使用了os.getcwd(),意為獲取當(dāng)前工作目錄路徑。2.TXT文件讀寫
TXT文件的寫入也比較簡(jiǎn)單,以下示例將先從給定的TXT文件中讀取數(shù)據(jù),對(duì)指定數(shù)據(jù)適當(dāng)處理后,將處理結(jié)果寫入指定TXT文件中,write()方法向一個(gè)文件中寫入數(shù)據(jù)。示例代碼如下(write_txt.py):2.TXT文件讀寫2.TXT文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會(huì)在chapter8/ile_read/files文件夾下生成一個(gè)名為writetxtfile.txt的文件,其中寫入了對(duì)應(yīng)格式的數(shù)據(jù)。TXT是包含極少格式信息的文件,并沒有明確的定義,通常是指那些能夠被系統(tǒng)終端或者簡(jiǎn)單的文本編輯器接受的格式。任何能讀取文本的程序都能讀取TXT文件,因此通常認(rèn)為這種文件是通用的、跨平臺(tái)的。由于結(jié)構(gòu)簡(jiǎn)單,TXT文件被廣泛用于記錄信息。在實(shí)際生產(chǎn)應(yīng)用中,更多的是向TXT文件中寫入數(shù)據(jù),一般日志文件都以TXT或LOG文件為多,能夠避免其他文件讀寫時(shí)遇到的一些問題。此外,當(dāng)文本文件中的部分信息出現(xiàn)錯(cuò)誤時(shí),往往能夠容易地從錯(cuò)誤中恢復(fù),并繼續(xù)處理其余內(nèi)容。3CSV文件讀寫3.CSV文件讀寫逗號(hào)分隔值(Comma-SeparatedValue,CSV),有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào)。CSV文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。CSV文件由任意數(shù)目的記錄組成,記錄間以某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號(hào)或制表符。所有記錄都有完全相同的字段序列,通常是純文本文件。
3.CSV文件讀寫CSV文件的規(guī)則如下:①開頭不留空,以行為單位。②可含或不含列名,含列名則居文件第一行。③一行數(shù)據(jù)不跨行,無空行。④以半角逗號(hào)(,)作分隔符,列為空也要表達(dá)其存在。⑤列內(nèi)容如存在半角引號(hào)(''),則替換成半角雙引號(hào)("")轉(zhuǎn)義,即用半角雙引號(hào)("")將該字段值包含。⑥文件讀寫時(shí),引號(hào)、逗號(hào)操作規(guī)則互逆。⑦內(nèi)碼格式不限,可為ASCI、Unicode或者其他。⑧不支持特殊字符。3.CSV文件讀寫讀取CSV文件時(shí),開頭不留空,以行為單位:可含或不含列名,含列名放第一行。讀取CSV文件需要導(dǎo)入csv模塊,示例代碼如下(read_csv.py):3.CSV文件讀寫讀取CSV文件時(shí),開頭不留空,以行為單位:可含或不含列名,含列名放第一行。讀取CSV文件需要導(dǎo)入csv模塊,示例代碼如下(read_csv.py):3.CSV文件讀寫執(zhí)行該P(yáng)Y文件,即可打印從指定文件中讀取的數(shù)據(jù)。CSV文件的寫入也需要導(dǎo)入csv模塊,以下示例(write_csv.py)將先從給定的CSV文件中讀取數(shù)據(jù),對(duì)指定數(shù)據(jù)做適當(dāng)處理后,將處理結(jié)果寫入指定CSV文件中。3.CSV文件讀寫3.CSV文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會(huì)在chapter8/ile_read/.fles文件夾下生成一個(gè)名為csv_write.csv的文件,其中寫入了對(duì)應(yīng)格式的數(shù)據(jù)。在實(shí)際應(yīng)用中,CSV文件的讀寫都比較多,特別在數(shù)據(jù)清洗過程中會(huì)更多地應(yīng)用CSV文件來做數(shù)據(jù)的載體。比如,從Hive導(dǎo)出數(shù)據(jù)一般選擇將Hive中的數(shù)據(jù)批量導(dǎo)入CSV文件,再通過讀取CSV文件批量導(dǎo)入數(shù)據(jù)庫(kù)。因?yàn)橥ㄟ^一個(gè)中間文件作為載體,可以快速地向數(shù)據(jù)庫(kù)中插入大批量數(shù)據(jù)。比如,將5GB的數(shù)據(jù)插入MySQL,若直接從Hive查詢數(shù)據(jù)導(dǎo)入MySQL,要5小時(shí)以上,而通過中間文件,從Hive將數(shù)據(jù)寫入CSV文件耗時(shí)為半小時(shí)左右,再?gòu)腃SV文件將數(shù)據(jù)批量導(dǎo)入MySQL,耗時(shí)也僅為半小時(shí)左右,整個(gè)過程耗時(shí)1小時(shí)左右,速度提升80%以上。4JSON文件讀寫4.JSON文件讀寫
JSON是JavaScript的子集,專門用于指定結(jié)構(gòu)化的數(shù)據(jù)。JSON是輕量級(jí)的數(shù)據(jù)交換方式,以人們更易讀的方式傳輸結(jié)構(gòu)化數(shù)據(jù)。JSON對(duì)象非常像Python的字典。JSON文件的讀操作需要導(dǎo)入json模塊。示例如下(read_json.py):4.JSON文件讀寫執(zhí)行該P(yáng)Y文件,即可打印從指定文件中讀取的數(shù)據(jù)。JSON文件的寫操作也需要導(dǎo)入json模塊,以下示例(write_json.py)將先從給定的JSON文件中讀取數(shù)據(jù),對(duì)指定數(shù)據(jù)做適當(dāng)處理后,將處理結(jié)果寫入指定JSON文件中。4.JSON文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會(huì)在chapter8/ileread/fles文件夾下生成一個(gè)名為write_json_file.json的文件,其中寫入了對(duì)應(yīng)格式的數(shù)據(jù)。5Word文件讀寫5.Word文件讀寫
DOC或DOCX文件是我們常見的Word文件,一般以文章、新聞報(bào)道和小說這類文字內(nèi)容較長(zhǎng)的數(shù)據(jù)為主。Python讀寫Word文件需要第三方庫(kù)擴(kuò)展支持,需要做如下安裝:讀取Word文件一般需要如下幾個(gè)步驟:(1)生成Word對(duì)象,并指向Word文件。(2)使用paragraphs0獲取Word對(duì)象全部?jī)?nèi)容。(3)循環(huán)paragraph對(duì)象,獲取每行數(shù)據(jù)并寫入列表。(4)將列表轉(zhuǎn)換為字符串,每個(gè)列表元素使用換行符連接。轉(zhuǎn)換后,數(shù)據(jù)的段落布局與Word文件相似。5.Word文件讀寫讀取Word文件需要導(dǎo)入docx模塊。操作示例如下(read_word.py):5.Word文件讀寫執(zhí)行該P(yáng)Y文件,即可打印從指定文件中讀取的數(shù)據(jù)。Word文件寫入一般需要如下幾個(gè)步驟:(1)創(chuàng)建生成臨時(shí)Word對(duì)象。(2)分別使用add_paragraph()和add_heading()對(duì)Word對(duì)象添加標(biāo)題和正文內(nèi)容。(3)如果設(shè)置正文內(nèi)容的字體加粗和斜體等,那么可以將正文內(nèi)容對(duì)象的屬性runs[0].bold和add_run('XX').italic設(shè)置為True.(4)如果插入圖片和添加表格,那么可以在Word對(duì)象中使用add-picture()和add_table()方法。(5)完成數(shù)據(jù)寫入,需要將Word對(duì)象保存為Word文件。5.Word文件讀寫Word文件寫入也需要導(dǎo)入docx模塊。操作示例如下(write_word.py):5.Word文件讀寫執(zhí)行該示例代碼,執(zhí)行成功后,會(huì)在chapter8/ile_read/les文件夾下生成一個(gè)名為demo.docx的文件,其中寫入了對(duì)應(yīng)格式的數(shù)據(jù)。6XML文件讀取6.XML文件讀取可擴(kuò)展標(biāo)記語言(eXtensibleMarkupLanguage,XML)是一個(gè)比較老的結(jié)構(gòu)化數(shù)據(jù)格式,是“純文本”格式,用來表示結(jié)構(gòu)化的數(shù)據(jù)。盡管ML是純文本的,但如果沒有解析器的幫助,幾乎難以辨認(rèn)。XML文件讀取需導(dǎo)入xml.dom.minidom模塊。操作示例如下(read_xml.py):6.XML文件讀取6.XML文件讀取7CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)前面講解了文本文件的數(shù)據(jù)讀取及數(shù)據(jù)寫入,本節(jié)將介紹如何將從CSV文件讀取的數(shù)據(jù)插入MySQL數(shù)據(jù)庫(kù)。使用SQLAlchemy操作數(shù)據(jù)庫(kù),在chapter8/database文件夾下存放數(shù)據(jù)庫(kù)表操作對(duì)象及數(shù)據(jù)庫(kù)連接文件。數(shù)據(jù)庫(kù)表創(chuàng)建文件示例代碼如下(model_create.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)執(zhí)行該P(yáng)Y文件,在數(shù)據(jù)庫(kù)data_school中會(huì)創(chuàng)建一個(gè)名為basic_info的表。數(shù)據(jù)庫(kù)表操作對(duì)象示例代碼如下(model_obj.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接示例代碼如下(sqlalchemy_conn.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)連接示例代碼如下(sqlalchemy_conn.py):①按行讀取數(shù)據(jù)插入MySQL。按行讀取,從CSV文件每讀取一行數(shù)據(jù),就往數(shù)據(jù)庫(kù)中插入一條記錄。示例代碼如下(sqlalchemy_csv_insert_mysql.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)執(zhí)行該P(yáng)Y文件,得到如下執(zhí)行結(jié)果:插入2000條記錄,耗時(shí)254.64556503295898s.由執(zhí)行結(jié)果看到,以按行讀取插入數(shù)據(jù)庫(kù)的方式,讀取并插入2000條記錄耗時(shí)為254s左右,即平均每秒不到10條。這個(gè)耗時(shí)與計(jì)算機(jī)性能有一定關(guān)系,但相差不會(huì)太大。②批量讀取數(shù)據(jù)插入MySQL:從CSV文件中讀取一定量的數(shù)據(jù)后,如1000條,以批量方式插入數(shù)據(jù)庫(kù)。示例代碼如下(sqlalchemy_batchinsert_mysql.py):7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)7.CSV文件讀取后插入MYSOL數(shù)據(jù)庫(kù)執(zhí)行該P(yáng)Y文件,得到如下執(zhí)行結(jié)果:由執(zhí)行結(jié)果看到,通過批量插入的方式,讀取并插入2000條記錄耗時(shí)1.8s左右,比按行讀取并插入快了100多倍。在實(shí)際應(yīng)用中,遇到大批量數(shù)據(jù)需要從文本文件導(dǎo)入數(shù)據(jù)庫(kù)時(shí),首選批量處理方式,還可以使用多線程或多進(jìn)程方式加快導(dǎo)入速度。8CSV文件讀取后插入MongoDB數(shù)據(jù)庫(kù)8.CSV文件讀取后插入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 魯人版道德與法治九年級(jí)上冊(cè)11.1《合同是當(dāng)事人之間的法律》聽課評(píng)課記錄
- 滬教版數(shù)學(xué)九年級(jí)下冊(cè)27.1《圓的基本性質(zhì)》聽評(píng)課記錄
- 人教版地理七年級(jí)下冊(cè)第三節(jié)《撒哈拉以南的非洲》聽課評(píng)課記錄1
- 人教版七年級(jí)數(shù)學(xué)下冊(cè) 聽評(píng)課記錄5.1.3 第1課時(shí)《同位角、內(nèi)錯(cuò)角、同旁內(nèi)角》
- 蘇科版數(shù)學(xué)七年級(jí)下冊(cè)聽評(píng)課記錄7.5多邊形的內(nèi)角和與外角和
- 聽評(píng)課記錄表8篇二年級(jí)
- 【部編版】道德與法治九年級(jí)下冊(cè)2.1《推動(dòng)和平與發(fā)展》聽課評(píng)課記錄
- 湘教版數(shù)學(xué)七年級(jí)下冊(cè)《相交直線所成的角》聽評(píng)課記錄
- 生產(chǎn)計(jì)劃外包合同(2篇)
- 獨(dú)生子女合同
- 2025民政局離婚協(xié)議書范本(民政局官方)4篇
- 2024年03月四川農(nóng)村商業(yè)聯(lián)合銀行信息科技部2024年校園招考300名工作人員筆試歷年參考題庫(kù)附帶答案詳解
- 小學(xué)一年級(jí)數(shù)學(xué)上冊(cè)口算練習(xí)題總匯
- 睡眠專業(yè)知識(shí)培訓(xùn)課件
- 潤(rùn)滑油知識(shí)-液壓油
- 2024年江蘇省中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫(kù)頻考點(diǎn)附帶答案
- 臨床思維能力培養(yǎng)
- 人教版高中物理必修第三冊(cè)第十章靜電場(chǎng)中的能量10-1電勢(shì)能和電勢(shì)練習(xí)含答案
- 中國(guó)宗教文化 中國(guó)古代宗教文化的特點(diǎn)及現(xiàn)代意義
- 2024年四川省巴中市級(jí)事業(yè)單位選聘15人歷年高頻難、易錯(cuò)點(diǎn)練習(xí)500題附帶答案詳解
- 《中國(guó)香文化》課件
評(píng)論
0/150
提交評(píng)論