视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Python读写Json涉及到中文的处理方法
2020-11-27 14:26:32 责编:小采
文档


今天在帮前端准备数据的时候,需要把数据格式转成json格式,说实话,涉及到中文有时候真的是很蛋疼,除非对Python的编码规则比较了解,不然处理起来真的很蛋疼。

整个逻辑

我们需要处理的是把一些文章处理,生成多个html文件,然后用json来显示文章的列表,图片,摘要和标题。

思路

为了以后的数据扩展,那必须有一个数据库,我的想法就是自己写一个简单的网页做为提交输入,然后post到后台以后录入到数据库中,再写一个展示文章的页面,展示效果正确后,写一个requests动态的把所有的数据都爬下来生成一个一个的html文档。最后的json数据我只要从数据库把数据抽出来生成就行了。

前端

其实前端的东西很简单,最近一直在写网页,所以前端的东西分分钟就搞定了。代码如下:

urls.py

from django.conf.urls import url, include
from . import views


urlpatterns = {
 url(r'^$', views.index, name='index'),
 url(r'add_article/', views.add_article, name='add_article'),
 url(r'^article/(?P<main_id>S+)/$', views.article, name='article'),
}
views.py

# coding=utf-8
from django.shortcuts import render
from .models import Tzxy

# Create your views here.


def index(request):
 return render(request, 'index.html')


def add_article(request):
 error = 'error'
 if request.method == 'POST':
 # 获取前段request的内容
 main_id = request.POST['main_id']
 img_url = request.POST['img_url']
 title = request.POST['title']
 content = request.POST['content']
 abstract = content[:50]
 print main_id
 indb = Tzxy(
 main_id=main_id,
 img_url=img_url,
 title=title,
 content=content,
 abstract=abstract
 )
 indb.save()
 error = 'success'
 return render(request, 'index.html', {'error': error})
 return render(request, 'index.html')


def article(request, main_id):
 article_detial = Tzxy.objects.get(main_id=main_id)
 return render(request, 'views.html', {'content': article_detial})

models.py

from __future__ import unicode_literals
from django.db import models
from django.contrib import admin


class Tzxy(models.Model):
 main_id = models.CharField(max_length=10)
 img_url = models.CharField(max_length=50, null=True)
 title = models.CharField(max_length=50)
 content = models.TextField()
 abstract = models.CharField(max_length=200)

admin.site.register(Tzxy)

模板我就随便写了一个简单的表单

index.html

展示的页面

当然,我里面使用了markdown来处理了一些数据。有关markdown的集成,可以移步《Django开发博客(六)——添加markdown支持》
爬数据的小脚本如下,需要使用到requests模块

# coding=utf-8
import sys
import requests
reload(sys)
sys.setdefaultencoding('utf8')


def tohtml(file_name, startpos, endpos):
 """
 请求网页数据后把网页源码存储为html格式,启动脚本时要先启动Django的Server
 :param file_name:生成文件名的前缀,最后一位用传入的数字来代替
 :param startpos:开始的数字
 :param endpos:结束的数字
 :return:None
 """

 for x in range(startpos, endpos):
 r = requests.get('http://127.0.0.1:8000/tzxy/article/' + file_name + str(x))
 with open('/Users/SvenWeng/Desktop/test/' + file_name + str(x) + '.html', 'w') as f:
 f.write(r.text)
 print 'success'


if __name__ == '__main__':
 tzhtl_name = 'tzxy_tzhtl_h_'
 djjyy_name = 'tzxy_djjyy_h_'
 tohtml(djjyy_name, 1, 39)

里面的一些命名自己可以根据需要去修改。

生成json

说实话,json的使用方式很简单,Python对json的支持也很好,不过涉及到中文就有点蛋疼了,我的代码是这样的:

# coding=utf-8
import sqlite3
import json
import sys
reload(sys)
sys.setdefaultencoding('utf8')

list_json = []

conn = sqlite3.connect('db.sqlite3')
c = conn.cursor()
sql = 'select * from Tzxy_tzxy'
c.execute(sql)
all_thing = c.fetchall()

for x in all_thing:
 dic_member = {'id': x[1].split('_')[3],
 'img': x[2],
 'title': x[3],
 'abstract': ''}
 list_json.append(dic_member)
conn.close()

final_json = json.dumps(list_json, sort_keys=True, indent=4)
with open('test.json', 'w') as f:
 f.write(final_json)

代码逻辑是:定义一个空列表,用来装生成的字典信息,然后从sqlite里面把之前存的数据全部抓出来。把数据循环生成自己想要的格式的字典,一个一个的插到列表中。再用Python提供的json.dumps方法把数据转成json格式,再写入文件就行了。
逻辑看上去是没什么问题,实现起来也很完美,但是最后我打开json文件检查的时候发现所有的中文都变成Unicode了。这简直是坑爹啊。

大致查了一下,好像网络上对这块说的内容并不详细,举得例子也都是非常非常简单的那种,直接给中文的,并不是我想要的,最后只能硬着头皮去看官方的说明,最后找到了这么一个东西ensure_ascii=False,在Python转Json的时候带上这个方法,也就是

final_json = json.dumps(list_json, sort_keys=True, indent=4, ensure_ascii=False)

这样处理之后,写入文件就是正常的中文了。

以上这篇Python读写Json涉及到中文的处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHP中文网。

更多Python读写Json涉及到中文的处理方法相关文章请关注PHP中文网!

下载本文
显示全文
专题