12.5.2 JSON序列化和反序列化
#json.dumps():对数据进行编码
#json.loads():对数据进行解码
#12.5.2 JSON序列化和反序列化
#json.dumps():对数据进行编码
#json.loads():对数据进行解码
import json
data={'num':1010,'name':'xiao mi'}
json_str=json.dumps(data)
print('原始数据:',data)
print('json 对象:',json_str)
输出:
原始数据: {‘num’: 1010, ‘name’: ‘xiao mi’}
#将json编译的字符串转化成一个python的数据结构
import json
data={'num':1011,'name':'honor'}
json_str=json.dumps(data)
print('原始:',data)
print('json:',json_str)
data2=json.loads(json_str)
print('data2:',data2)
print('data2_name',data2['name'])
print('data2_num',data2['num'])
输出:
原始: {‘num’: 1011, ‘name’: ‘honor’}
with open('C:/Users/Public/Documents/text2.txt','w')as f:
json.dump(data,f) #编码
#读取数据
with open('C:/Users/Public/Documents/text2.txt','r')as f:
data=json.load(f) #解码
print(data)
课后题:
1.写入到文件
data=[' 静夜思\n 李 白\n床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。']
path='C:/Users/Public/Documents/text2.'
f_name=open(path,'w')
f_name.writelines(data)
f_name=open(path,'r')
print(f_name.read())
输出:
静夜思
2.更改文字
import os
#方式一 定义函数
def alter (file,old_str,new_str):
file_data=''
with open(file,'r') as f:
for line in f:
if old_str in line:
line=line.replace(old_str,new_str)
file_data+=line
with open(file,'w') as f:
f.write(file_data)
alter('C:/Users/Public/Documents/text2.txt','月','月亮') #调用函数
#方式二 直接写入新的文件
f=open('C:/Users/Public/Documents/text2.txt','r')
f_new=open('C:/Users/Public/Documents/text22.txt','w')
for line in f:
if "月" in line:
line=line.replace('月','月亮')
f_new.write(line)
输出:
3.统计各个字出现的频率,将统计结果写入新的文件里面。
pip install jieba #下载jieba包后安装
import jieba
import pandas as pd
data['cut'] = data['静夜思'].apply(lambda x : list(jieba.cut(x)))
data.head()
# 将所有的分词合并
words = []
for content in data['cut']:
words.extend(content)
# 创建分词数据框
corpus = pd.DataFrame(words, columns=['word'])
corpus['cnt'] = 1
# 分组统计
g = corpus.groupby(['word']).agg({'cnt': 'count'}).sort_values('cnt', ascending=False)
g.head(30)
# 读取停用词数据
stopwords = pd.read_csv('C:/Users/Administrator/Downloads/chineseStopWords.txt', encoding='gb18030', names=['stopword'], index_col=False)
stopwords.head()
g.to_excel("test2.xlsx", 'Sheet1') #将结果写入表格,比较粗糙,含停用词
输出:
参考链接
https://www.cnblogs.com/qi-yuan-008/p/11688911.html
https://www.cnblogs.com/qi-yuan-008/p/11689530.html 尝试案例 文本频次统计
from collections import Counter
from operator import itemgetter
# txt_list可以写成函数参数进行导入
txt_list = ['千古','人间','人间','龙','龙','龙','哈哈哈','人才','千古','千古']
c = Counter()
for x in txt_list:
if len(x) >= 1:
if x == '\r\n' or x == '\n' or x == ' ':
continue
else:
c[x] += 1
print('常用词频统计结果: \n')
for (k, v) in c.most_common(4): #打印排名前四位
print('%s%s %s %d' % (' ' * (3 ), k, '*' * 3, v))
# 按照词频数从大到小打印
d = sorted(c.items(),key=itemgetter(1),reverse = True)
for ss,tt in d:
out_words=ss + '\t' + str(tt)
print(out_words)
https://blog.csdn.net/zhuzuwei/article/details/80775078 文本频次加权统计 后期可做词云或其他
import pandas as pd
import jieba
import jieba.analyse as anls
if __name__ == '__main__':
data = pd.read_excel(r'空气指数评论.xlsx')
# content为excel的列名
opinion_content = data['content'].dropna().values
all_word = ''
for i in opinion_content: #形成整个字符串
all_word = all_word +','+ str(i)
all_word = all_word.strip() #去掉字符串的空格
all_word_upper = all_word.upper() #大写
segment=['爬','上去'] # #如果有不想被切分开的词,例如王者荣耀,和平精英等,可以进行参数设置:tune=True jieba.analyse 是基于tf-idf算法的关键词抽取
for ii in segment:
jieba.suggest_freq(ii, tune=True)
anls.set_stop_words('C:/Users/Administrator/Downloads/chineseStopWords.txt') #加载停用词文档,网上可以下载或者自己创建
tags = anls.extract_tags(all_word_upper, topK=None, withWeight=True)
for x, w in tags:
print('%s %s' % (x, w))
for v, n in tags:
#权重n是小数,乘了十万成为整数,可以按需求设置不同值
out_words= v + '\t' + n
#注意'a+'为追加写入,因此如果重新运行程序,则需要先删除上次生成的文件,结果保存在当前目录下,可以更改目录
with open('cut_words_content.txt','a+',encoding='utf-8')as f:
f.write(out_words+'\n')
涉及知识点:
1、extract_tags()函数
anls.extract_tags(all_word_upper, topK=None, withWeight=True) #进行加权
jiaba.analyse.extract_tags() 可以使用默认的TF-IDF模型对文档进行分析。
参数withWeight设置为True时可以显示词的权重,topK设置显示的词的个数。
2、sorted函数
d = sorted(c.items(),key=itemgetter(1),reverse = True) # 按照词频数从大到小打印
Counter类中的most_common()函数parameter(参数):传进去一个可选参数n(代表获取数量最多的前n个元素,如果不传参数,代表返回所有结果)
4.文本转excel:
import pandas as pd
data = pd.read_csv('C:/Users/Public/Documents/text2.txt',encoding='gb18030')
df = pd.DataFrame(data)
df.head()
#若要保存到excel文件,请添加以下内容
# writer = pd.ExcelWriter('C:/Users/Public/Documents/test.xlsx') 有问题?
df.to_excel("test.xlsx", 'Sheet1') #修改后成功