1.python递归深度调整
在执行new_data = copy.deepcopy(data)
时
报错:maximum recursion depth exceeded while calling a Python object
原因:python默认的递归深度是很有限的
解决:加入如下代码,手动调整递归深度
import sys
sys.setrecursionlimit(100000)
2.python读取文件read()、readline()、readlines()的区别
问题:执行result = file.readlines()
时,输出result发现开头和结尾有[’…’]
原因:readlines()方法是以列表的形式返回读取结果的
read()、readline()、readlines()的区别
read() 一次性读取文本的所有内容,以字符串的形式返回。
readline() 只读取文本的第一行内容,以字符串的形式返回。
readlines() 读取文本所有内容,以list列表形式返回,包括\n和空格。
3.python判断文件是否存在
问题:将数据写入csv文件时,只有第一次写入时需要写入表头,第二次以后就不需要写入表头,故需要判断文件是否存在
解决:
import os
os.path.exists('xxx/xxx/xxx')
通过以上代码返回True或False,True表示文件存在,False表示文件不存在
4.python去除字符串中指定字符之间的内容
例子: sen = ‘《活着》讲述一个人一生的故事[1],这是一个历尽世间沧桑和磨难老人的人生感言[2],是一幕演绎人生苦难经历的戏剧[3][4]。’
目的:去除‘[’和‘]’之间的内容
import re
sen = '《活着》讲述一个人一生的故事[1],这是一个历尽世间沧桑和磨难老人的人生感言[2],是一幕演绎人生苦难经历的戏剧[3][4]。'
print(sen)
r = re.compile('\[(.*?)\]')
sen = re.sub(r, '', sen)
print(sen)
结果:
5.python统计中文词频
利用jieba分词,然后将词存放至字典,排序后输出
txt = open('xxx.txt', "r", encoding='utf-8').read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
else:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
# print(items)
for i in range(len(items)):
word, count = items[i]
print("{0:<10}{1:>5}".format(word, count))
6.python生成词云
def getText(file):
with open(file, 'r', encoding='UTF-8') as txt:
txt = txt.read()
jieba.lcut(txt)
return txt
def getWordCloud(filename):
txt = getText(filename+'.txt')
wordclouds = wordcloud.WordCloud(width=1000, height=800, margin=2).generate(txt)
wordclouds.to_file('{}.png'.format(filename))
os.system('{}.png'.format(filename))
如果遇到生成的生成的词云中文乱码问题,我们需要找到wordcloud.py文件
将这里的字体换成自己想要的字体,可以通过C:\Windows\Fonts找到Windows自带的字体文件,并把字体文件拷贝到下图目录当中
7.python分词,往jieba分词库中加入字典,提高分词准确率
def fenci(inFile, outFile, dictPath):
"""
利用自己创建的字典,加入到jieba分词库中,提高分词准确率
:param inFile: 输入的txt文件
:param outFile: 输出的分词后的文件
:param dictPath: 字典
:return:
"""
out = open(outFile, 'a', encoding='utf-8')
fenci = open(inFile, "r", encoding="utf-8").read()
jieba.load_userdict(dictPath)
fenci = jieba.lcut(fenci)
for word in fenci:
out.write(word + ' ')
注意:字典中每个词要以换行符进行分割
另外,jieba.cut生成的是一个生成器,generator,也就是可以通过for循环来取里面的每一个词。jieba.lcut 直接生成的就是一个list。
8.python正则表达式替换问号
import re
TEXT = '前??言,参?考?文?献'
strList = re.findall(r'\?+[\u4e00-\u9fff]', TEXT)
for s in strList:
TEXT = TEXT.replace(s, ''+s[-1])
print(TEXT)
输出结果:前言,参考文献