写python时遇到的问题

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!!!!)

  1. 去英文标点
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的计算是惰性的,只有在需要返回下一个数据时它才会计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值