12.5.2 JSON序列化和反序列化
    #json.dumps():对数据进行编码
    #json.loads():对数据进行解码

    1. #12.5.2 JSON序列化和反序列化
    2. #json.dumps():对数据进行编码
    3. #json.loads():对数据进行解码
    4. import json
    5. data={'num':1010,'name':'xiao mi'}
    6. json_str=json.dumps(data)
    7. print('原始数据:',data)
    8. print('json 对象:',json_str)

    输出:
    原始数据: {‘num’: 1010, ‘name’: ‘xiao mi’}

    1. #将json编译的字符串转化成一个python的数据结构
    2. import json
    3. data={'num':1011,'name':'honor'}
    4. json_str=json.dumps(data)
    5. print('原始:',data)
    6. print('json:',json_str)
    7. data2=json.loads(json_str)
    8. print('data2:',data2)
    9. print('data2_name',data2['name'])
    10. print('data2_num',data2['num'])

    输出:
    原始: {‘num’: 1011, ‘name’: ‘honor’}

    1. with open('C:/Users/Public/Documents/text2.txt','w')as f:
    2. json.dump(data,f) #编码
    3. #读取数据
    4. with open('C:/Users/Public/Documents/text2.txt','r')as f:
    5. data=json.load(f) #解码
    6. print(data)

    课后题:
    1.写入到文件

    1. data=[' 静夜思\n 李 白\n床前明月光,\n疑是地上霜。\n举头望明月,\n低头思故乡。']
    2. path='C:/Users/Public/Documents/text2.'
    3. f_name=open(path,'w')
    4. f_name.writelines(data)
    5. f_name=open(path,'r')
    6. print(f_name.read())

    输出:
    静夜思

    2.更改文字

    1. import os
    2. #方式一 定义函数
    3. def alter (file,old_str,new_str):
    4. file_data=''
    5. with open(file,'r') as f:
    6. for line in f:
    7. if old_str in line:
    8. line=line.replace(old_str,new_str)
    9. file_data+=line
    10. with open(file,'w') as f:
    11. f.write(file_data)
    12. alter('C:/Users/Public/Documents/text2.txt','月','月亮') #调用函数
    13. #方式二 直接写入新的文件
    14. f=open('C:/Users/Public/Documents/text2.txt','r')
    15. f_new=open('C:/Users/Public/Documents/text22.txt','w')
    16. for line in f:
    17. if "月" in line:
    18. line=line.replace('月','月亮')
    19. f_new.write(line)

    输出:
    图片.png

    3.统计各个字出现的频率,将统计结果写入新的文件里面。

    1. pip install jieba #下载jieba包后安装
    2. import jieba
    3. import pandas as pd
    4. data['cut'] = data['静夜思'].apply(lambda x : list(jieba.cut(x)))
    5. data.head()
    6. # 将所有的分词合并
    7. words = []
    8. for content in data['cut']:
    9. words.extend(content)
    10. # 创建分词数据框
    11. corpus = pd.DataFrame(words, columns=['word'])
    12. corpus['cnt'] = 1
    13. # 分组统计
    14. g = corpus.groupby(['word']).agg({'cnt': 'count'}).sort_values('cnt', ascending=False)
    15. g.head(30)
    16. # 读取停用词数据
    17. stopwords = pd.read_csv('C:/Users/Administrator/Downloads/chineseStopWords.txt', encoding='gb18030', names=['stopword'], index_col=False)
    18. stopwords.head()
    19. g.to_excel("test2.xlsx", 'Sheet1') #将结果写入表格,比较粗糙,含停用词

    输出:
    图片.png
    参考链接
    https://www.cnblogs.com/qi-yuan-008/p/11688911.html
    https://www.cnblogs.com/qi-yuan-008/p/11689530.html 尝试案例 文本频次统计

    1. from collections import Counter
    2. from operator import itemgetter
    3. # txt_list可以写成函数参数进行导入
    4. txt_list = ['千古','人间','人间','龙','龙','龙','哈哈哈','人才','千古','千古']
    5. c = Counter()
    6. for x in txt_list:
    7. if len(x) >= 1:
    8. if x == '\r\n' or x == '\n' or x == ' ':
    9. continue
    10. else:
    11. c[x] += 1
    12. print('常用词频统计结果: \n')
    13. for (k, v) in c.most_common(4): #打印排名前四位
    14. print('%s%s %s %d' % (' ' * (3 ), k, '*' * 3, v))
    15. # 按照词频数从大到小打印
    16. d = sorted(c.items(),key=itemgetter(1),reverse = True)
    17. for ss,tt in d:
    18. out_words=ss + '\t' + str(tt)
    19. print(out_words)

    https://blog.csdn.net/zhuzuwei/article/details/80775078 文本频次加权统计 后期可做词云或其他

    1. import pandas as pd
    2. import jieba
    3. import jieba.analyse as anls
    4. if __name__ == '__main__':
    5. data = pd.read_excel(r'空气指数评论.xlsx')
    6. # content为excel的列名
    7. opinion_content = data['content'].dropna().values
    8. all_word = ''
    9. for i in opinion_content: #形成整个字符串
    10. all_word = all_word +','+ str(i)
    11. all_word = all_word.strip() #去掉字符串的空格
    12. all_word_upper = all_word.upper() #大写
    13. segment=['爬','上去'] # #如果有不想被切分开的词,例如王者荣耀,和平精英等,可以进行参数设置:tune=True jieba.analyse 是基于tf-idf算法的关键词抽取
    14. for ii in segment:
    15. jieba.suggest_freq(ii, tune=True)
    16. anls.set_stop_words('C:/Users/Administrator/Downloads/chineseStopWords.txt') #加载停用词文档,网上可以下载或者自己创建
    17. tags = anls.extract_tags(all_word_upper, topK=None, withWeight=True)
    18. for x, w in tags:
    19. print('%s %s' % (x, w))
    20. for v, n in tags:
    21. #权重n是小数,乘了十万成为整数,可以按需求设置不同值
    22. out_words= v + '\t' + n
    23. #注意'a+'为追加写入,因此如果重新运行程序,则需要先删除上次生成的文件,结果保存在当前目录下,可以更改目录
    24. with open('cut_words_content.txt','a+',encoding='utf-8')as f:
    25. 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:

    1. import pandas as pd
    2. data = pd.read_csv('C:/Users/Public/Documents/text2.txt',encoding='gb18030')
    3. df = pd.DataFrame(data)
    4. df.head()
    5. #若要保存到excel文件,请添加以下内容
    6. # writer = pd.ExcelWriter('C:/Users/Public/Documents/test.xlsx') 有问题?
    7. df.to_excel("test.xlsx", 'Sheet1') #修改后成功