Python问题列表

目录

Q: 如何判断一个对象是否是可迭代的?

原理
一个可迭代对象的类型是Iterable.
使用isinstance(objectName, Iterable)可判断。如果isinstance(objectName)返回True,表明对象是可迭代的
否则是不可迭代的。

Q: 如何判断一个对象是否是Iterator对象?

原理
使用isinstance(objectName, Iterable)可判断。如果isinstance(objectName, Iterator)返回True,表明对象是Iterator对象; 否则不是。

Q: 如何把list等非Iterator对象变成Iterator对象

使用iter(IteratorObjectName); 好处是Iterator对象可以使用next()返回下一个值。

例子

>>> from collections import Iterator, Iterable
>>> ll = [1,2,3]
>>> isinstance(ll,  Iterable) ##判断ll是否是可迭代的
>>> gene = (x*x for x in [1,2,3])
>>> isinstance(gene,  Iterable) ##判断gene是否是Iterable对象
>>> llIter = iter(ll) ##把ll非Iterator对象变成Iterable对象
>>> isinstance(llIter,  Iterator) ##返回值为true,表明llIter(原为Iterable)已经变成了Iterator对象.

Q:字符串数据预处理

功能: 把可打印字符中字母,数字抽取出;其他可打印字符转换成空格。
版本一:使用基本python语法

def clearStr(char):
    newChar = ""
    import string
    if char in string.printable: ##判断char是否是可打印字符
        if char.isalnum() or char.isspace():
            newChar = char
        else:
            newChar = " "
    return newChar

def change():
       ll = "Linksys EtherFast 8-Port 10/100 Switch (New/Workgroup)"
    newll = map(clearStr, ll)
    print "".join(newll)

版本二:使用Keras
推荐,理由能用开源的工具,就用。
使用Keras的text_to_word_sequence 函数.

import keras
from keras.preprocessing import text
def cleanStr():
    s = "abc-df 1323/dfd"
    newS = keras.preprocessing
    newText = keras.preprocessing.text.text_to_word_sequence(s,
       filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n', lower=True, split=" ")
    print newText, type(newText)

Topic: 路径相关操作

原则
* 进行文件操作,不使用字符串拼接的方式。理由:你的代码可以跨系统执行,不需要有额外的修改。

Q: 将目录和文件名连接成一个绝对路径?

方法,调用os.path的join函数

import os
dirV1 = '/home/xuyl/PycharmProjects/StudyPython' ##目录名caseI
dirV2 = '/home/xuyl/PycharmProjects/StudyPython/' ##目录名caseII
file = 'abtbuy.inconsistentPair.txt' ##文件名
pathV1 = os.path.join(dirV1, file) ##将文件名和目录名连接在一起
pathV2 = os.path.join(dirV2, file)

Q:把路径分割成两部分,一部分目录,另外一部分最后一个级别的目录和文件名?

方法,调用os.path的split函数

import os
absPath = 'home/xuyl/123.txt'
rootDir, fn = os.path.split(absPath) ##caseI: 把路径分成两部分,第一部分是目录;第二部分是文件名
path = 'home/xuyl'
other, lastDirName = os.path.split(absPath) ##caseII:把路径分成两部分,第一部分是部分目录(去掉最后一个目录的);第二部分是最后一级的目录名

Q: 如何抽取文件的扩展名?

方法 调用os.path的splitext函数。
例子

import os
absPath = 'home/xuyl/123.txt'
other, extendName = os.path.splitext(absPath) ##返回值的第二部分是.txt

Topic: 文件

Q: 如何删除文件?

函数 os.remove()

import os
os.remove(/home/test.txt)

Q:如何写文件?

函数 调用file.write()
例子

with open("/home/log.txt", 'a') as f: ##追加文件
    f.write("Hello world!\n")

Q: 如何读一个小文件(内存可以放下)?

思路 一次读入内存
方式一:read()+close() 不推荐太复杂了-必须有f.close()函数。

import os
dir = '/home/xuyl/PycharmProjects/'
file = 'abtbuyP.txt'
path = os.path.join(dir, file)
try:
    f = open(path, 'r')
    f.read() ##一次读入内存
finally:
    if f:
        f.close()

方式二:read()+with子句

import os
dir = '/home/xuyl/PycharmProjects/'
file = 'abtbuyP.txt'
path = os.path.join(dir, file)
with open(path, 'r') as f: ### with clause can close file after operate.
    print(f.read())

方式三:read()+codecs.open()
例子

import codecs
with codecs.open('/home/xuyl/test.txt', 'r', encoding='utf-8') as f:
    f.read()

Q:如何读一个大文件(内存放不下)?

思路 一行一行读
调用的函数 f.readlines()
例子 如read()函数类似,有三种调用方法

import os
dir = '/home/xuyl/PycharmProjects/'
file = 'abtbuyP.txt'
path = os.path.join(dir, file)
try:
    f = open(path, 'r')
    for line in f.readlines():  ### read file line by line.
    print(line.strip())
finally:
    if f:
        f.close()

Q: 使用cPickle将python对象以二进制形式存储到本地

使用pickle和cPickle的函数是相同的,但据说cPickle比较快(理由-cPickle底层使用的是c代码).参考的是文献[3]的pickle代码。

import cPickle
info_dict = {'1':1, '2': 1, '3': 3}
f = open('info.pkl', 'wb')
cPickle.dump(info_dict, f) ##将python对象info_dict存储到本地
f.close()

f = open('info.pkl', 'r+')
info2_dict = cPickle.load(f)##将文件info.pkl文件中python对象,抽取到内存
print info2_dict

PS:不清楚是否必须使用后缀名.pkl.

Q: 使用Keras把文本的中单词都抽取出来,并做成词典。

import keras
from keras.preprocessing import text
def extractDictionary():
    texts=[]
    texts.append("Kenwood KDC-C669 Car CD Changer - KDCC669")
    texts.append("Cordless Solo S2 Radar/Laser Detector - 010ES20A")

    tokenizer = keras.preprocessing.text.Tokenizer()
    tokenizer.fit_on_texts(texts) ##feed texts to Tokenizer

    word_index = tokenizer.word_index ## word_index 包含文本texts中,所有单词的词典, 且词典的键是word, 值是索引下标。
    print "word_index:", word_index

    texts_seq = tokenizer.texts_to_sequences(texts) ## 将文本转换成序列. 该序列是文本中单词在word_index的键值。
    print "texts_seq", texts_seq ##PS: 不明白为什么会是15个单词,明明词典里面只有14个

    texts_matrix = tokenizer.texts_to_matrix(texts, mode="tfidf")##将文本转换成一个向量,该向量是文本中
    texts_matrix = tokenizer.texts_to_matrix(texts, mode="binary")
    print texts_matrix, "shape of texts_matrix", texts_matrix.shape

Q:对列表中元素进行数学运算

"""
任务,计算list中元素的和,均值和最大值等。
核心思想, 把list转换成numpy的ndarray多维数组,然后用矩阵运算来计算。
好处:第一,必然比你用高级语言写的代码快(底层用c实现);第二,节省时间-直接调接口.不需要你花费时间检查逻辑。
"""
def mathOperation():
    ll = [1,2,3]
    import numpy as np
    lla = np.asarray(ll)
    print "sum", lla.sum()
    print "max", lla.max()
    print "average", lla.mean()

Q:如何区分类属性,实例属性,并取出类(或实例)属性的值,设置类(或实例)属性的值?

注意事项:
* 把属性名,设置为__xxx;
* 使用@property修饰器,把属性变成可读的属性;
* 使用@xx.setter修饰器,把属性变成可写的属性(属性值可修改)。
* 类属性与实例属性的区别是,实例属性位于init(self)下面,并且需要有前缀”self”.

example

 class CatII(object):
    __type = "Br" ## 类属性(class attribute)
    def __init__(self):
        self.__name = "" ## 实例属性(instance attribute) 方式一
        pass

    ### set instance attribute and methods.
    @property
    def name(self):## 获得实例属性
        return self.__name ## 实例属性(instance attribute) 方式一

    @name.setter
    def name(self, value):##将实例属性设置为value
        self.__name = value

    ### class attribute and methods
    @property
    def type(cls): ##获得类属性的
        'class method get the class attribute value'
        return cls.__type
    @type.setter
    def type(cls, value): ##设置类的属性值
        cls.__type = value

PS: 代码可以从git 上InstanceVSClass下载。

Topic:时间的统计

Q:输出两个时间的时间差?

"""
output time difference in seconds.
"""
def getTimeDiff():
    start = datetime.datetime.now()
    time.sleep(5)
    end = datetime.datetime.now()
    diff = end - start
    print("diff:", diff)
    print("diff.seconds", (end - start).seconds)  ##输出时间差,以秒为单位

Topic:有哪些python的参考书籍

  • Python Essential Reference 4th Edition download

参考资料

[1] 廖雪峰的官网 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
[2] Keras中文文档 https://keras-cn.readthedocs.io/en/latest/preprocessing/text/
[3] pickle 存储到本地 https://blog.linuxeye.cn/369.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值