爬蟲(八):文件處理

来源:https://www.cnblogs.com/liuhui0308/archive/2019/12/18/12054503.html
-Advertisement-
Play Games

1. json文件處理 1.1 什麼是json JSON(JavaScript Object Notation,JS對象簡譜)是一種輕量級的數據交換格式。它基於ECMAScript(歐洲電腦協會制定的js規範)的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得J ...


1. json文件處理

1.1 什麼是json

JSON(JavaScript Object Notation,JS對象簡譜)是一種輕量級的數據交換格式。它基於ECMAScript(歐洲電腦協會制定的js規範)的一個子集,採用完全獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得JSON成為理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提升網路傳輸效率。

1.2 json支持數據格式

1.對象(字典)。使用花括弧。

2.數組(列表)。使用方括弧。

3.整型、浮點型、布爾類型和null類型。

4.字元串類型(字元串必須要用雙引號,不能用單引號)。

多個數據之間使用逗號分開。

註意:json本質上就是一個字元串。

1.3 字典和列表轉json

import json

books = [
    {
        "title":"壞蛋是怎樣煉成的1","price":9.8
    },
    {
        "title":"壞蛋是怎樣煉成的2","price":9.9
    }
 ]

json_str = json.dumps(books,ensure_ascii=False)
print(json_str)
print(type(books))
print(type(json_str))

因為json在dump的時候,只能觸發ascii的字元,因此會將中文進行轉義,這時候我們可以使用ensure_ascii=False關閉這個特性。

在python中,只有基本數據類型才能轉換成json格式的字元串。即:int、float、str、list、dict、tuple。

將json數據直接dump到文件中:

json模塊中處理dumps函數,還有一個dump函數,這個函數可以傳入一個文件指針,直接將字元串dump到文件中。

import json

books = [
    {
        "title":"壞蛋是怎樣煉成的1","price":9.8
    },
    {
        "title":"壞蛋是怎樣煉成的2","price":9.9
    }
 ]

with open('a.json','w',encoding='utf-8') as fp:
    json.dump(books,fp,ensure_ascii=False)

dump和dumps的區別:

dump()不需要使用write()方法,只需要寫哪個字典、哪個文件即可;而.dumps()需要使用write()方法寫入

如果要把字典寫到文件裡面的時候,dump()好用;但如果不需要操作文件,或需要把內容存到資料庫和Excel,則需要使用dumps()先把字典轉成字元串,再寫入。

1.4 將一個json字元串load成python對象

#encoding: utf-8
import json

json_str = '[{"title": "壞蛋是怎樣煉成的1", "price": 9.8}, {"title": "壞蛋是怎樣煉成的2", "price": 9.9}]'

books = json.loads(json_str)
print(type(books))
for book in books:
    print(book)

直接從文件中讀取json:

#encoding: utf-8
import json

with open('a.json','r',encoding='utf-8') as fp:
   books = json.load(fp)
   for book in books:
       print(book)

load與loads的區別:

loads()傳的是字元串,而load()傳的是文件對象

使用loads()時需要先讀文件再使用,而load()則不用

2. CSV文件處理

CSV是一種通用的、相對簡單的文件格式,被用戶、商業和科學廣泛應用。最廣泛的應用是在程式之間轉移表格數據,而這些程式本身是在不相容的格式上進行操作的(往往是私有的和/或無規範的格式)。因為大量程式都支持某種CSV變體,至少是作為一種可選擇的輸入/輸出格式。

2.1 讀取csv文件

csv數據:

csv文件不能直接創建,只能由excel文件另存為csv格式。

import csv

with open('Demo.csv','r') as fp:
    reader = csv.reader(fp)
    titles = next(reader)
    for x in reader:
        print(x)

 

為什麼讀取不到第一行呢?

因為第一行一般都是存放標題等信息。 

這樣操作,以後獲取數據的時候,就要通過上面的方法來獲取數據。 如果想要在獲取數據的時候通過標題來獲取,那麼可以用DictReader。

import csv

with open('Demo.csv','r') as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x)

 

我們可以通過標題來選中返回的數據:

import csv

with open('Demo.csv','r') as fp:
    reader = csv.DictReader(fp)
    for x in reader:
        print(x['數據1'])

 

2.2 寫入數據到csv文件

寫入數據到csv文件,需要插件一個writer對象,主要用到兩個方法。一個是writerow,這個是寫入一行。一個是writerows,這個是寫入多行。

import csv

headers = {'name','age','height'}
values = {
    ('張三',18,170),
    ('李四',20,175),
    ('王五',21,180)
}
with open('test.csv','w',encoding='utf-8') as fp:
    writer = csv.writer(fp)
    writer.writerow(headers)
    writer.writerows(values)

也可以使用字典的方式把數據寫入。這時候就需要使用DictWriter了。

import csv

headers = ['name','age','height']
values = [
    {'name':'張三','age':18,'height':170},
    {'name':'李四','age':20,'height':175},
    {'name':'王五','age':21,'height':180}
]
with open('test.csv','w',encoding='utf-8') as fp:
    writer = csv.DictWriter(fp,headers)
    writer.writeheader()
    writer.writerows(values)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用Spring Boot 本節將詳細介紹如何使用Spring Boot。它涵蓋了諸如構建系統,自動配置以及如何運行應用程式之類的主題。我們還將介紹一些Spring Boot最佳實踐。儘管Spring Boot並沒有什麼特別的地方(它只是另一個可以使用的庫),但是有一些建議可以使您的開發過程更輕鬆一 ...
  • 該參數主要是控制新生代需要經歷多少次GC晉升到老年代中的最大閾值。在JVM中用4個bit存儲(放在對象頭中),所以其最大值是15。如果該值=0則表示對象在Eden區gc後不經過Survivor區直接進入老年代。如果該值等於15,並非意味著,對象必須要經歷15次YGC才會晉升到老年代中。例如,當sur... ...
  • 一 Netty服務端NioEventLoop的啟動 Netty服務端創建、初始化完成後,再向Selector上註冊時,會將服務端Channel與NioEventLoop綁定,綁定之後,一方面會將服務端Channel的註冊工作當做Runnable任務提交到NioEventLoop的taskQueue, ...
  • 在一篇《初步瞭解JVM第一篇》中,我們已經瞭解了: 類載入器:負責載入*.class文件,將位元組碼內容載入到記憶體中。其中類載入器的類型有如下: 啟動類載入器(Bootstrap) 擴展類載入器(Extension) 應用程式類載入器(AppClassLoader) 用戶自定義載入器(User-Def ...
  • 微信公眾平臺後臺配置自定義菜單 一、首先進入微信公眾平臺, 訪問地址 https://mp.weixin.qq.com/ 二、用註冊的微信公眾號的賬號和密碼登錄,左側的功能選項中進入自定義菜單頁面 三、在自定義菜單頁面 點擊紅框的 + 號 就可以增加新的菜單 四、對新加的菜單可以根據自己的需要進行設 ...
  • 一款PHP+jQuery實現的中國地圖熱點數據統計展示實例,當滑鼠滑動到地圖指定省份區域,在彈出的提示框中顯示對應省份的數據信息。 ...
  • python中複數實現( 2) 0.5和開根號sqrt( 2)的區別 ( 2) 0.5和sqrt( 2)是不同的,前者是複數後者是會報錯的。 Python用迴圈構造的函數數組,運行這個數組裡面的函數後返回值都一樣 上面程式的輸出是: 為什麼明明f(x)返回的是x+i,而i是從0到4變化的。按道理執行 ...
  • 一般而言,函數後面只有一個括弧。如果看見括弧後還有一個括弧,說明第一個函數返回了一個函數,如果後面還有括弧,說明前面那個也返回了一個函數。以此類推。 比如fun()() PS:遇到問題沒人解答?需要Python學習資料?可以加點擊下方鏈接自行獲取 note.youdao.com/noteshare? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...