1.发现os.listdir()获取的文件目录底下的名字是乱序的。。。。一个大坑。。
解决方法:
假设我的文件名字是1.xls,2.xls,3.xls…这种的
那么使用fileList.sort(key= lambda x:int(x[:-4]))
就可以对os,listdir()得到的文件文字进行分类。
2.有两个list,如何转换成字典的形式
list1 = ["1","2","3"]
list2 = ["a","b","c"]
dictionary = dict(zip(list1, list2))
3.读取一个文件夹底下的所有文件 以及如何读取xls文件
import xlrd
import os
rootdir = "result/sum_vecs"
fileList = os.listdir(rootdir)
for j in range(len(fileList)):
filename = fileList[j]
path = os.path.join(rootdir, filename)
if os.path.isfile(path):
xls_file = xlrd.open_workbook(path)
xls_sheet = xls_file.sheets()[0]
rows = xls_sheet.nrows
columns = xls_sheet.ncols
# print(rows)
# print(columns)
word_weight_w2v = {}
words_in_vecs = []
weights_in_vecs = []
for ir in range(1,rows):
words_in_vecs.append(xls_sheet.cell(ir,0).value)
weights_in_vecs.append(xls_sheet.cell(ir,1).value)
# word_weight_w2v[words_in_vecs] = weights_in_vecs
# 现在拿到的是每一个文件里面的所有单词和对应的叠加权重
# print(words_in_vecs)
# print(weights_in_vecs)
word_weight_w2v = dict(zip(words_in_vecs, weights_in_vecs))
print(word_weight_w2v)
4.装什么包都是cannot unpack file这个错,使用以下的命令:
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pakegename
5.在按知乎的教程更改了ipython notebook 如何修改一开始打开的文件夹路径
jupyter notebook的启动目录后打开的还是C盘的某目录,然后改了一下jupyter notebook的快捷方式,在后面加了一下要打开的目录。。。终于可以了。
6.非常重要!!!
读取文件的时候报错'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
,查看了一下文档的编码,确实是ANSI,也是用encoding="gbk"
读取的,但是还是报错。
解决方法:改为encoding='gb18030', errors='ignore'
OK成功读入!
7.文本预处理,去标点符号:
string = re.sub('[\s+\.\!\/_,$%^*(+\"\')]+|[+——()\\﹒〈〉?【】《》“”!,。?%、~@#¥%……&*()]+', "",raw)
string = re.sub("(nbsp)+","",string)
8.使用pandas向csv里写数据
首先有一个List,然后使用下面这句:
result = pd.DataFrame({"id": ids, "title": titles, "key": keys},
columns=['id', 'title', 'key'])
result.to_csv("result/baike_textrank.csv",index=False)
9.python中没有三目运算符 ?:
代替方式为 cache[i] = 1 if dict_scores[i] > 0 else -1
10.字符串的连接
" ".join(一个List!!!!)
- 去英文标点
from string import punctuation
all_text = ''.join([c for c in reviews if c not in punctuation])
12.for _ in range()
这里下划线表示 临时变量,仅用一次,后面无需再用到
13.zip(Iterable)可以用于将两个list打包成对应的元组,python3返回一个对象,需要用list转化
map(function, iterable, …),python3返回一个迭代器
14.一些基础知识
生成器:通过列表生成式创建的列表会占用很大的内存空间,如果我们需要在循环的过程中不断推算出后面的元素,就可以用生成器,将列表生成式的[]换成()即可。使用next(generator)来表示后一个元素;此外,如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
可以使用isinstance()判断一个对象是否是Iterable对象。Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。