【python】零散的学习笔记

2018-10-23  本文已影响0人  吵吵人

1. 获取当前工作空间、修改路径

import os
os.getcwd() #显示结果'C:\\Windows\\system32'
os.chdir('E:\\MachineLearning\\machinelearninginaction\\Ch04')

2. 如何加载自定义的py文件

     比如我自定义了一个叫“operator.py”的文件,加载的办法为:将这个文件放置在python安装目录的Lib文件夹下,然后直接import operator即可。

3. 读取文件生成二维列表的方法

     注意以下两者的区别:
     for i in range(len(dataset))      #i是一个整型
     for i in dataset      #如果是文本数据,i是其中的一行

4. A=B

     无论是什么类型,直接用A=B,A和B都会指向同一个地址空间,无论改变哪一个另外一个都会发生改变

5. ASCII码

     数字48(0)——57(9)
     字母65(A)——90(Z)
            97(a)——122(z)

6.中文乱码的问题

     改文件编码方式为utf-8,在打开文件的时候(python3),要加上第三个参数encoding=‘utf8’。


     读取文件首行多了"\ufeff"字符串问题的解决办法:第三个参数encoding=‘utf8’改为encoding='utf-8-sig’,简单理解为忽略utf编码文件的编码信息声明。
     其他问题可参考:https://www.cnblogs.com/mingjiatang/p/4890420.html

7. 读写文件小结

以读取CSV文件为例


文件内容截图

打开文件
用with open(……) as ……的打开方式是为了自动调用f.close(),保证无论是否出错都能正确地关闭文件。

with open('E:/AreaRect/data.csv', 'r') as f:
    print(f.read())

结果


读取数据
python文件对象提供了三个“读”方法: read()、readline() 和 readlines()

输入

users=[]
pay=[]
rest=[]

with open('E:/AreaRect/data.txt', 'r',encoding='utf-8-sig') as f:
    for line in f.readlines():
        line=line.rstrip('\n').split(',\t')
        users.append(line[0])
        pay.append(line[1])
        rest.append(line[2])

输出


写入数据
with open('E:/AreaRect/dataNew.txt', 'w+') as f:
    f.writelines(users)

结果



写入

with open('E:/AreaRect/dataNew.txt', 'w+') as f:
    for i in range(len(users)):
        f.write(users[i]+',')
        f.write(str(pay[i])+',')
        f.write(str(rest[i])+'\n')

结果


8. 生成值全为0的列表

A = [0 for _ in range(len(B))]

9. yield关键字

以生成斐波那契数列为例,输入如下代码

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b      # 使用 yield
        a, b = b, a + b 
        n = n + 1
 
for n in fab(5): 
    print(n)

结果

简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,直到再次遇到 yield。

要注意区分 fab 和 fab(5),fab 是一个 generator function,而 fab(5) 是调用 fab 返回的一个 generator,好比类的定义和类的实例的区别。

上一篇下一篇

猜你喜欢

热点阅读