1. 程式人生 > >Python3 JSON 中文字元讀寫注意事項

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