Python3 JSON 中文字元讀寫注意事項
一些說明
我為什麼要寫這篇文章?
最近報名了中國大學MOOC的嵩天老師的爬蟲課,頗有收穫,決定自己找個大學新聞網站練練手,果然還是碰到了臭名昭著的中文字元處理的問題,特此記錄。
這篇文章講什麼?
這篇文章講的是如何把 Python 中的 Dict 轉化為 JSON Object 以及 如何把 List 轉化為 JSON Array,其中 Dict 和 List 中的資料包括中文,並且如何把這些資料在檔案中以正確的方式存入,然後正確地讀入到記憶體中重複使用。關鍵點在於中文字元的處理,這在 Python2 中一度是一個麻煩的問題,到了 Python3 中稍有改善,但還是需要在讀寫時做出一些設定。這裡詳細地講了設定地地方有哪些。
如何實現
問題講清楚了,再多說也無益處,直接上程式碼。
# -*- coding: utf-8 -*-
import json
import requests
from bs4 import BeautifulSoup
import re
import traceback
import codecs
newsList = []
newsDict = {}
r = requests.get('http://news.hunnu.edu.cn/sdxw.htm')
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text ,'lxml')
newsInfoTags = soup.find_all(id=re.compile('lineu'))
for item in newsInfoTags:
elem = item.contents
# 注意 <class 'bs4.element.NavigableString'> 可自動轉換為str
# 所以是否把結果用顯式地用str()轉換都可以
newsDict['tag'] = elem[3].string
newsDict['title'] = elem[5].string
newsDict['date' ] = elem[7].string
newsList.append(newsDict)
# 把資料寫入JSON檔案中,注意 'utf8' 必不可少
with codecs.open('newsList.json', 'w', 'utf8') as f:
# 注意 ensure_ascii=False 必不可少
f.write(json.dumps(newsList, ensure_ascii=False))
# 從JSON檔案中把資料讀入記憶體,注意 'utf8' 必不可少
with codecs.open('newsList.json', 'r', 'utf8') as f:
objs = json.loads(f.read())
print(len(objs))
這裡主要用了兩個 Python 的內建庫,分別是 codecs 和 json,相關使用介紹:
需要注意的地方請參看註釋,大致就是這樣。值得注意的是,json 這個庫特別實用,它可以自動識別 Python/檔案 型別,然後把它轉換為對應的 檔案/Python 型別,這些豐富的庫使得 Python 算得上是唯一一門可以稱得上是超級語言的程式語言了。
相關推薦
Python3 JSON 中文字元讀寫注意事項
一些說明 我為什麼要寫這篇文章? 最近報名了中國大學MOOC的嵩天老師的爬蟲課,頗有收穫,決定自己找個大學新聞網站練練手,果然還是碰到了臭名昭著的中文字元處理的問題,特此記錄。 這篇文章講什麼? 這篇文章講的是如何把 Python 中的 Dict
jdbc操作非中文字符集oracle資料庫導致的中文字元讀寫亂碼的解決方案
oracle資料庫向來是一個麻煩的資料庫,要不它的DBA怎麼就那麼值錢呢,呵呵。中文的亂碼問題也是一個比較頭疼的問題,在odbc的連線中,可以通過設定客戶端的字符集(修改登錄檔)來解決中文問題。而通過jdbc 的thin方式來連線資料庫,就沒那麼容易了。如果資料庫使用的是非中文字符集,往往在處理中文問題的時
Python3 中文檔案讀寫
字串在Python內部的表示是Unicode編碼,因此,在做編碼轉換時,通常需要以Unicode作為中間編碼,即先將其他編碼的字串解碼(decode)成Unicode,再從Unicode編碼(encode)成另一種編碼。 在新版本的python3中,取消了un
Python 基礎 - Json文件讀寫
ref csdn spa cnblogs 一個 所有 文本格式 tail pytho JSON介紹 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON采用完全獨立於語言的文本格式,但
[Python3]INI文件讀寫
file source 參數 () pad 構建 應用場景 博客園 配置 概述 ini是我們常見到的配置文件格式之一。 ini是微軟Windows操作系統中的文件擴展名(也常用在其他系統)。 ini“初始化(Initial)”的縮寫。正如該術語
Json文件讀寫
lex add name convert iter exce har 服務器 配置 namespace web { public partial class testJson : System.Web.UI.Page { protected
QJsonDocument實現Qt下JSON文檔讀寫
處理 兩個 jsonp character 文件讀寫 ring byte binary name 版權聲明:若無來源註明,Techie亮博客文章均為原創。 轉載請以鏈接形式標明本文標題和地址: 本文標題:QJsonDocument實現Qt下JSON文檔讀寫 本文地
Python json練習_讀寫文件函數
odi 文件中 all username span pytho AS code dump 需求: 1、用戶的註冊信息寫在json文件中 2、將讀寫文件的重復操作提取為函數,簡潔代碼 實現: import json def op_data(filename,dic=None
python中文件讀寫的相關操作及應用
img write {} list r+ 密碼 else data adl 1:既讀又寫 1 with open(‘數據‘,mode=‘r+‘,encoding=‘utf-8‘) as f: 2 print(f.read()) #輸出結
HTML5實現本地JSON檔案的讀寫
參考: 使用HTML5來實現本地檔案讀取和寫入 (FileReader讀取json檔案,FileSaver.js儲存json檔案) w3school <input>標籤 FileReader WebAPI介面 FileSaver.js下載地址 File
Python下JSON格式的讀寫
一、 JSON (JavaScript Object Notation)是一種資料交換格式。 JSON 的規定字符集是UTF-8,字串必須使用""雙引號,Object的鍵也必須使用雙引號,不能使用單引號; JSON格式的陣列或者物件中,不同的元素用逗號隔開,最後一個元素後面,不能加逗號。
java使用FileUtils 對json檔案進行讀寫
package com.dl.utils; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; public class GetPutItems { //寫
系統學習 Java IO (十四)----字元讀寫快取和回退 BufferedReader/BufferedWriter & PushbackReader
目錄:系統學習 Java IO---- 目錄,概覽 BufferedReader BufferedReader 類構造器接收一個 Reader 物件,為 Reader 例項提供緩衝。 緩衝可以加快 IO 的速度。 BufferedReader 不是一次從網路或磁碟讀取一個字元,而是一次讀取一個更大的塊。
系統學習 Java IO (十五)----字元讀寫 Reader/Writer 其他子類
目錄:系統學習 Java IO---- 目錄,概覽 跟蹤行號的緩衝字元輸入流 LineNumberReader LineNumberReader 類是一個 BufferedReader ,用於跟蹤讀取字元的行號。行號從 0 開始。每當 LineNumberReader 在包裝的 Reader 返回的字元中
對於json檔案的讀寫操作
對json檔案的讀操作 返回的一個列表,裡面是多個字典 def read_json(self,jsonname): with open(r"./{}.json".format(jsonname),"r") as json_f:
JSON檔案以及Python對JSON檔案的讀寫
一,什麼是JSON檔案 JSON和XML都是網際網路上資料交換的主要載體。 在JSON出現之前,大家一直用XML來傳遞資料。因為XML是一種純文字格式,所以它適合在網路上交換資料。XML本身不算複雜,但是,加上DTD、XSD、XPath、XSLT等一大堆複雜的規範以後,任
Python檔案讀寫注意編碼
檔案的讀寫操作1.python3中的預設的編碼解碼方式為utf-8 windows預設使用的編碼方式為gbk 當讀取一個windows檔案(gbk),可以指定讀取時使用的編碼encoding=('gbk')或者不需要指定 with open('a.txt','r','encoding=(gbk)') as f
系統學習 Java IO (十三)----字元讀寫 Reader/Writer 及其常用子類
Reader Reader 類是 Java IO API 中所有 Reader 子類的基類。 Reader 類似於 InputStream ,除了它是基於字元而不是基於位元組的。 換句話說,Java Reader 用於讀取文字,而 InputStream 用於讀取原始位元組。 Writer Writer 類
Python3 檔案流及讀寫和OS函式
讀和寫檔案open() 將會返回一個 file 物件,基本語法格式如下: open(filename, mode)filename:包含了你要訪問的檔名稱的字串值。mode:決定了開啟檔案的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個引數是非強制的,預設檔案訪問
io流讀寫注意兩點
package com.test.study; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException