pythonemptydict
㈠ python计算数字出现次数问题!
def countdigits(aString):
c = 10*[0]
for e in aString:
c[int(e)] += 1
return c
def main():
for n,v in enumerate(countdigits(str(input('Enter a string of numbers: '))))
if v != 0:
print '%d occurs %d time%s'%(n, v, v!=1 and 's' or '')
main()
㈡ 如何串联python知识点
1)避免‘\n'等特殊字符的两种方式:
a)利用转义字符‘\'b)利用原始字符‘r' print r'c:\now'
2)单行注释,使用一个#,如:
#hello Python多行注释,使用三个单引号(或三个双引号),如:'''hello pythonhello world'''或"""hello pythonhello world"""另外跨越多行的字符串。也可以使用三个单引号或三个双引号,如:'''......'''或者"""......"""
3)字符串中嵌入双引号等特殊符号
a)利用转义字符‘\'b)使用单引号括起这个字符串。print ('i l"o"ve fis.com')
4)条件分支:
if condition: 条件为真执行的操作 else: 条件为假执行的操作 if condition: action elif condition: action else: action python可以有效避免“悬挂else”(if else对应关系出错)条件表达式(三元操作符) small = x if x<y else y 如果x<y ,small=x.否则small=y断言assert:当这个关键字后面的条件为假,程序自动崩溃并抛出异常 assert 3>4 可以利用他置入检查点
5)while条件:
条件为真执行的操作 for 目标 in 表达式:循环体 例:favorite='fishc' for i in favorite: print(i,end='') range([start,] stop[,step=1])生成一个从start参数的值到stop参数值的数字序列 break:终止当前循环体。跳到外层程序continue:终止本轮循环,开始下一轮循环(if condition true)
6)and逻辑操作符可以将任意表达式连接在一起,并得到一个布尔类型值
7)引入外援:
a)random模块b)randint(),返回一个随机的整数import random 或 from random import randint()secret=random.randint(1,10)
8)python数据类型
a)数值类型:整型、布尔类型、浮点型、e记法(1.5e10)b)类型转换: int()转换为整数 str()转换为字符串 float()转换为浮点数c)获取关于类型的信息: type()函数 a=520 type(a) isinstance()函数 a=12 isinstance(a,int) --->返回true isinstance(a,str) -->返回false
9)Python值常用操作符
+ - * / % **(幂运算) //(地板除法,结果偏小)比较操作符 > < >= <=逻辑操作符 and or not 优先级: 幂运算** 正负号 + - 算术操作符 * / // + - 比较操作符 < > = 逻辑擦作福 not and or
10)列表-->可以把整数、浮点数、字符串等打包在一起。数组却不能
创建一个普通列表: member = ['小甲鱼','小布丁','黑夜']创建一个混合列表: mix=[1,'小甲鱼',3.12,[1,2,3]]创建空列表: empty=[]向列表添加元素: append(): member.append('福禄娃')-->只能添加一个。末尾添加 extend(): member.extend(['test','test1'])-->只能以列表形式添加.末尾添加 insert(): member.insert(1,'牡丹')-->第一位插入牡丹列表中获取元素:使用索引index。 mix[1]列表中删除元素:使用remove()。 mix.remove('小甲鱼') 使用del。 del mix[3]/mix 使用pop()。 mix.pop()/mix.pop(1)列表切片:使用slice。 mix[1:4]/mix[1:]/mix[:4]列表操作符:>,and,+,*,in/not in列表的小伙伴:dir(list) mix.count('小甲鱼') mix.index('小甲鱼')列表逆序:使用reverse。 mix.reverse()列表排序:使用sort。 mix.sort() mix.sort(func,key) mix.sort(reverse=True)
11)元组--->不可改变的列表
和列表的主要不同点:a)创建和访问一个元组: 大部分用()/, ;列表用[]b)元组不可修改数值c)更新和删除一个元组:temp = temp[:2] + ('test3',) + temp[2:] del tempd)IN/NOT IN,关系操作符,逻辑操作符,乘号操作符,连接操作符
12)字符串的各种内置方法
str1='i love fishc.com'a=str1[:6] + '插入的字符串'+str1[6:]capitalize(): str2.capitalize()casefold()--->全部小写 str2.casefold()center(width)-->居中,不足空格填充count(sub[,start[,end]])-->返回sub在string中出现的次数endswith(sub[,start[,end]])-->以sub结束?startswith(prefix[,start[,end]])-->以prefix开头expandtabs([tabsize=8])-->将tab键转换为空格find(sub[,start[,end]])-->sub是否在字符串中出现rfind(sub)...index(sub[,start[,end]])-->跟sub一样,不过会产生异常rindex(sub..).....istitle()/isupper()/ljust(width)/lower()/strip()/title()/lower()join(sub):以字符串做分隔符,分割subpartion(sub):找到子字符串sub,把字符串分成一个3元组replace(old,new[,count])split(sep=none,maxsplit=-1)-->不带参数以空格做分隔符swapcase()-->字符串大小写翻转zfill(width)-->返回长度为width的字符串,不够补充空格
13)字符串格式化 replacement
"{0} love {1}.{2:.2f}".format("i","fishc",3.1424)"{a} love {b}.{c}".format(a="i",b="fishc",c="com")"{0} love {b}.{c}".format("i",b="fishc",c="com")格式化符号含义: %c:格式化字符及其ASCII码 '%c %c %c' % (97,98,99) %s:格式化字符串 %d:格式化整数 %o:格式化无符号八进制数 %x:格式化无符号十六进制数 %X:...(大写) %f:格式化定点数,可指定小数点后的精度 %e:用科学技术发格式化定点数===%E %g:根据值的大小决定使用%f或%e===%G格式化操作符辅助命令: m.n :m是显示的最小总宽度,n是小数位精度 - :用于左对齐 + :在正数面前添加正号 # :在八进制面前显示0,在十六进制面前显示0x 0 :空格用0填充字符串转义字符 \a:发出系统响铃声 \b、\t、\n
14)序列
列表、元组和字符串的共同点: a)都可以通过索引 b)索引值从零开始内置方法: list()-->help-->转换为序列 list() a=list() list(iterable) b='i love fishc.com' b=list(b) tuple([iterable])-->把一个可迭代对象转换为元组 b=tuple(b) str(obj)-->把obj对象转换为字符串 len(obj)-->返回obj的长度 max(序列/元组) / min(序列/元组) sum(iterable[,start=0])-->返回序列iterable。。的总和 sorted(序列/元组)-->排序 reversed(序列/元组)-->返回一个迭代器对象 list(reversed(序列/元组))-->返回序列 enumerate(序列/元组)-->返回一个迭代器对象 list(enumerate(序列/元组))-->返回数组形式列表 zip(a,b)-->合并成以元组形式的列表 list(zip(a,b))
15)函数
定义:def Myfunction(): print('this is my first function')调用:Myfunction()函数的参数: def Myfunction(name,age): print(name+age+'test') Myfunction('gncao',‘age')函数的返回值: return value形参(parameter):函数定义时的参数实参(argument):实际传递的参数函数文档:在函数中实现在函数体中用 '' 或 #查看函数文档: a) functionname.__doc__ (四个下划线) b) help(functionname)关键字参数:避免参数出乱 def Myfunction(words,name): ...... Myfunction(words='words123',name='name123') 默认参数: def Myfunction(name='name123',words='words123') ...... 收集参数:在参数前面加上*号 def test(*params): print('参数的长度是:',len(params)) print('第二个参数是:',params[1]) test(1,'小甲鱼',2,4,5,6,7) def test(*params,exp): print('参数的长度是:',len(params),exp) print('第二个参数是:',params[1]) test(1,'小甲鱼',23,4,2,5,7,exp=0)
16)函数有返回值,过程没有返回值
17)函数变量作用域(可见性)
局部:local-->函数内部定义的变量,局部可用全局:global-->全局可访问当在函数内部试图修改全局变量时,则会在函数内部新建一个跟 全局变量名相同的局部变量
18)内嵌函数和闭包
global关键字: def myfun(): global count ->>>全局变量 count=10 print(count)内嵌函数: def fun1(): print('fun1()正在被调用...') def fun2(): print('fun2()正在被调用') fun2()只能通过fun1()访问fun2()闭包:在一个内部函数中,对外部函数的变量的引用。成内部函数为闭包 def funx(x): def funy(y): return x * y return funy调用方式: i=funx(8) i(5) 或 funx(4)(5) 通过关键字nonlocal可以使得内部函数调用外部函数变量。 def fun1(): x=5 def fun2(): nonlocal x x*=x return x return fun2()
19,递归:
recursion() def fac(n): if n==1: return 1 else: return n*fac(n-1) number=int(input('请输入一个整数:')) result=fac(number) print('%d 的阶乘是:%d' % (number,result)) 迭代方法:def fab(n): n1=1 n2=1 n3=1 if n <1: print('输入有错') return -1 while ( n-2>0 ): n3=n2+n1 n1=n2 n2=n3 n-=1 return n3 result=fab(20)if result != -1: print('总共有%d对小兔子诞生:' % result) 递归方法:def fab(n): if n < 1: print('error') return -1 if n==1 or n==2: return 1 else: return fab(n-1) + fab(n-2) result=fab(20)print('总共有%d对兔子诞生' % result) 但是递归的效率比较低
20)字典(key-value)映射/序列例1:dict1={'李宁':'一切皆有可能','耐克':'just do it','阿迪达斯':'impossible is nothing'} print('李宁的口号是:',dict1['李宁']) 例2:dict3=dict((('f',70),('i',105))) 例3:dict4=dict(小甲鱼='编程改变世界',test='test')dict4['小甲鱼']='修改小甲鱼对应的value' -->如果没有该KEY,则会自动添加一个KEY 字典的内建方法:a)dict2['key']-->访问字典的元素b)fromkeys(s[,v]) -->创建或查询keydict1.fromkeys((1,2,3)){1: None, 2: None, 3: None}dict1.fromkeys((1,2,3),'number'){1: 'number', 2: 'number', 3: 'number'}c)keys()-->dict.keys() -->打印出dict的所有keyvalues()-->dict.values() -->打印出dict的所有valueitems()-->dict.items() -->打印出dict所有(key,value)get()--> dict.get(key) -->打印key对应的valuedict.get(key,'text')-->打印key对应的value,如果不存在,则打印textin操作符 --> key in dict2clear() -->dict.clear() -->清空dict的数据() -->b=a.() -->拷贝字典id(a)-->查看idpop(key) --> dict.pop(key) -->弹出keypopitem() -->dict.popitem() -->随机弹出keysetdefault() -->dict.setdefault(key) -->新建keyupdate() -->dict.update(dict) -->更新字典
㈢ python 函数变量 参数怎么使用
刚学用Python的时候,特别是看一些库的源码时,经常会看到func(*args, **kwargs)这样的函数定义,这个*和**让人有点费解。其实只要把函数参数定义搞清楚了,就不难理解了。
先说说函数定义,我们都知道,下面的代码定义了一个函数funcA
def funcA():
pass
显然,函数funcA没有参数(同时啥也不干:D)。
下面这个函数funcB就有两个参数了,
def funcB(a, b):
print a
print b
调用的时候,我们需要使用函数名,加上圆括号扩起来的参数列表,比如 funcB(100, 99),执行结果是:
100
99
很明显,参数的顺序和个数要和函数定义中一致,如果执行funcB(100),Python会报错的:
TypeError: funcB() takes exactly 2 arguments (1 given)
我们可以在函数定义中使用参数默认值,比如
def funcC(a, b=0):
print a
print b
在函数funcC的定义中,参数b有默认值,是一个可选参数,如果我们调用funcC(100),b会自动赋值为0。
OK,目前为止,我们要定义一个函数的时候,必须要预先定义这个函数需要多少个参数(或者说可以接受多少个参数)。一般情况下这是没问题的,但是也有在定义函数的时候,不能知道参数个数的情况(想一想C语言里的printf函数),在Python里,带*的参数就是用来接受可变数量参数的。看一个例子
def funcD(a, b, *c):
print a
print b
print "length of c is: %d " % len(c)
print c
调用funcD(1, 2, 3, 4, 5, 6)结果是
1
2
length of c is: 4
(3, 4, 5, 6)
我们看到,前面两个参数被a、b接受了,剩下的4个参数,全部被c接受了,c在这里是一个tuple。我们在调用funcD的时候,至少要传递2个参数,2个以上的参数,都放到c里了,如果只有两个参数,那么c就是一个empty tuple。
好了,一颗星我们弄清楚了,下面轮到两颗星。
上面的例子里,调用函数的时候,传递的参数都是根据位置来跟函数定义里的参数表匹配的,比如funcB(100, 99)和funcB(99, 100)的执行结果是不一样的。在Python里,还支持一种用关键字参数(keyword argument)调用函数的办法,也就是在调用函数的时候,明确指定参数值付给那个形参。比如还是上面的funcB(a, b),我们通过这两种方式调用
funcB(a=100, b=99)
和
funcB(b=99, a=100)
结果跟funcB(100, 99)都是一样的,因为我们在使用关键字参数调用的时候,指定了把100赋值给a,99赋值给b。也就是说,关键字参数可以让我们在调用函数的时候打乱参数传递的顺序!
另外,在函数调用中,可以混合使用基于位置匹配的参数和关键字参数,前题是先给出固定位置的参数,比如
def funcE(a, b, c):
print a
print b
print c
调用funcE(100, 99, 98)和调用funcE(100, c=98, b=99)的结果是一样的。
好了,经过以上铺垫,两颗星总算可以出场了:
如果一个函数定义中的最后一个形参有 ** (双星号)前缀,所有正常形参之外的其他的关键字参数都将被放置在一个字典中传递给函数,比如:
def funcF(a, **b):
print a
for x in b:
print x + ": " + str(b[x])
调用funcF(100, c='你好', b=200),执行结果
100
c: 你好
b: 200
大家可以看到,b是一个dict对象实例,它接受了关键字参数b和c。
㈣ 用python单元测试怎么测一段代码
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作。
比如对函数abs(),我们可以编写出以下几个测试用例:
输入正数,比如1、1.2、0.99,期待返回值与输入相同;
输入负数,比如-1、-1.2、-0.99,期待返回值与输入相反;
输入0,期待返回0;
输入非数值类型,比如None、[]、{},期待抛出TypeError。
把上面的测试用例放到一个测试模块里,就是一个完整的单元测试。
如果单元测试通过,说明我们测试的这个函数能够正常工作。如果单元测试不通过,要么函数有bug,要么测试条件输入不正确,总之,需要修复使单元测试能够通过。
单元测试通过后有什么意义呢?如果我们对abs()函数代码做了修改,只需要再跑一遍单元测试,如果通过,说明我们的修改不会对abs()函数原有的行为造成影响,如果测试不通过,说明我们的修改与原有行为不一致,要么修改代码,要么修改测试。
这种以测试为驱动的开发模式最大的好处就是确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。
我们来编写一个Dict类,这个类的行为和dict一致,但是可以通过属性来访问,用起来就像下面这样:
>>> d = Dict(a=1, b=2)
>>> d['a']
1
>>> d.a
1
mydict.py代码如下:
class Dict(dict):
def __init__(self, **kw):
super(Dict, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Dict' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
为了编写单元测试,我们需要引入Python自带的unittest模块,编写mydict_test.py如下:
import unittest
from mydict import Dict
class TestDict(unittest.TestCase):
def test_init(self):
d = Dict(a=1, b='test')
self.assertEquals(d.a, 1)
self.assertEquals(d.b, 'test')
self.assertTrue(isinstance(d, dict))
def test_key(self):
d = Dict()
d['key'] = 'value'
self.assertEquals(d.key, 'value')
def test_attr(self):
d = Dict()
d.key = 'value'
self.assertTrue('key' in d)
self.assertEquals(d['key'], 'value')
def test_keyerror(self):
d = Dict()
with self.assertRaises(KeyError):
value = d['empty']
def test_attrerror(self):
d = Dict()
with self.assertRaises(AttributeError):
value = d.empty
编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。
以test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。
对每一类测试都需要编写一个test_xxx()方法。由于unittest.TestCase提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们所期望的。最常用的断言就是assertEquals():
self.assertEquals(abs(-1), 1) # 断言函数返回的结果与1相等
另一种重要的断言就是期待抛出指定类型的Error,比如通过d['empty']访问不存在的key时,断言会抛出KeyError:
with self.assertRaises(KeyError):
value = d['empty']
而通过d.empty访问不存在的key时,我们期待抛出AttributeError:
with self.assertRaises(AttributeError):
value = d.empty
运行单元测试
一旦编写好单元测试,我们就可以运行单元测试。最简单的运行方式是在mydict_test.py的最后加上两行代码:
if __name__ == '__main__':
unittest.main()
这样就可以把mydict_test.py当做正常的python脚本运行:
$ python mydict_test.py
另一种更常见的方法是在命令行通过参数-m unittest直接运行单元测试:
$ python -m unittest mydict_test
.....
----------------------------------------------------------------------
Ran 5 tests in 0.000s
OK
这是推荐的做法,因为这样可以一次批量运行很多单元测试,并且,有很多工具可以自动来运行这些单元测试。
setUp与tearDown
可以在单元测试中编写两个特殊的setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。
setUp()和tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:
class TestDict(unittest.TestCase):
def setUp(self):
print 'setUp...'
def tearDown(self):
print 'tearDown...'
可以再次运行测试看看每个测试方法调用前后是否会打印出setUp...和tearDown...。
㈤ python中如何提取一组数据中的第一列数据
概述
直接提取会报错,把array数组转换成list,即可提取,使用numpy转换
步骤详解
1、直接提取尝试:
group=[[1,2],[2,3],[3,4]]
#提取第一列元素
print(group[:,1])
#Out:TypeError: list indices must be integers or slices, not tuple
2、使用numpy转换:
import numpy as np
group=[[1,2],[2,3],[3,4]]
#numpy转化
ar=np.array(group)
print(ar[:,1])
#Out:[2 3 4]
拓展内容
numpy详解
Numpy对象是数组,称为ndarray
维度(dimensions)称作轴(axes),轴的个数叫做秩(rank)。注:有几级中括号就有几个维度
一、ndarray.attrs:
ndarray.ndim 秩
ndarray.shape 例如一个2排3列的矩阵,它的shape属性是(2,3)
ndarray.size 数组元素的总个数
ndarray.dtype 元素类型,NumPy提供自己的数据类型
ndarray.itemsize 数组中每个元素的字节大小
二、数组创建函数:
array
asarray将输入转换成ndarray
arange
ones
zeros
empty 只分配内存空间不填充任何值
eye 创建N*N单位矩阵(对角线为1)
三、数组和标量之间的运算
numpy数组的一个特点,不用编写循环就可对数据执行批量运算,这通常称作矢量化(vectorization)。
四、基本的索引和切片
numpy数组的索引是一个内容丰富的主题,因为选取数据子集或单个元素的方式有很多。这里我仅详细介绍常用的方法,对于高级功能的方式我列举名称,读者可以等到要用的时候自行查阅资料。
㈥ python怎么对defaultdict中的值进行操作
In[52]:
In[53]:data_str='sdgfdhggerg'
In[54]:counter=defaultdict(int)
In[55]:foritemindata_str:
...:counter[item]+=1
...:
In[56]:counter
Out[56]:defaultdict(int,{'d':2,'e':1,'f':1,'g':4,'h':1,'r':1,'s':1})
In[57]:dir(defaultdict)
Out[57]:
['__class__',
'__cmp__',
'__contains__',
'____',
'__delattr__',
'__delitem__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__gt__',
'__hash__',
'__init__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__missing__',
'__ne__',
'__new__',
'__rece__',
'__rece_ex__',
'__repr__',
'__setattr__',
'__setitem__',
'__sizeof__',
'__str__',
'__subclasshook__',
'clear',
'',
'default_factory',
'fromkeys',
'get',
'has_key',
'items',
'iteritems',
'iterkeys',
'itervalues',
'keys',
'pop',
'popitem',
'setdefault',
'update',
'values',
'viewitems',
'viewkeys',
'viewvalues']
In[58]:counter.keys()
Out[58]:['e','d','g','f','h','s','r']
In[59]:counter.values()
Out[59]:[1,2,4,1,1,1,1]
In[60]:counter.iteritems()
Out[60]:<dictionary-itemiteratorat0x43be9a8>
In[61]:counter.iteritems
Out[61]:<functioniteritems>
In[63]:new_defau=defaultdict(int,{'a':5})
In[64]:counter.update(new_defau)
In[65]:counter
Out[65]:
defaultdict(int,
{'a':5,'d':2,'e':1,'f':1,'g':4,'h':1,'r':1,'s':1})
㈦ python queue中有几个元素
直接这样就可以看到了
>>> dir(queue)
['Empty', 'Full', 'LifoQueue', 'PriorityQueue', 'Queue', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'deque', 'heappop', 'heappush', 'threading', 'time']
>>> dir(queue.Queue)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__mole__', '__ne__', '__new__', '__rece__', '__rece_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_get', '_init', '_put', '_qsize', 'empty', 'full', 'get', 'get_nowait', 'join', 'put', 'put_nowait', 'qsize', 'task_done']
>>>
使用qsize这个函数就可以得到元素数
㈧ python 读取CSV 文件
读取一个CSV 文件
最全的
一个简化版本
filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
可以是URL,可用URL类型包括:http, ftp, s3和文件。对于多文件正在准备中
本地文件读取实例:://localhost/path/to/table.csv
**sep **: str, default ‘,’
指定分隔符。如果不指定参数,则会尝试使用逗号分隔。分隔符长于一个字符并且不是‘s+’,将使用python的语法分析器。并且忽略数据中的逗号。正则表达式例子:' '
**delimiter **: str, default None
定界符,备选分隔符(如果指定该参数,则sep参数失效)
delim_whitespace : boolean, default False.
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep='s+'。如果这个参数设定为Ture那么delimiter 参数失效。
在新版本0.18.1支持
header : int or list of ints, default ‘infer’
指定行数用来作为列名,数据开始行数。如果文件中没有列名,则默认为0,否则设置为None。如果明确设定header=0 就会替换掉原来存在列名。header参数可以是一个list例如:[0,1,3],这个list表示将文件中的这些行作为列标题(意味着每一列有多个标题),介于中间的行将被忽略掉。
注意:如果skip_blank_lines=True 那么header参数忽略注释行和空行,所以header=0表示第一行数据而不是文件的第一行。
**names **: array-like, default None
用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。默认列表中不能出现重复,除非设定参数mangle_pe_cols=True。
index_col : int or sequence or False, default None
用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
如果文件不规则,行尾有分隔符,则可以设定index_col=False 来是的pandas不适用第一列作为行索引。
usecols : array-like, default None
返回一个数据子集,该列表中的值必须可以对应到文件中的位置(数字可以对应到指定的列)或者是字符传为文件中的列名。例如:usecols有效参数可能是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’]。使用这个参数可以加快加载速度并降低内存消耗。
as_recarray : boolean, default False
不赞成使用:该参数会在未来版本移除。请使用pd.read_csv(...).to_records()替代。
返回一个Numpy的recarray来替代DataFrame。如果该参数设定为True。将会优先squeeze参数使用。并且行索引将不再可用,索引列也将被忽略。
**squeeze **: boolean, default False
如果文件值包含一列,则返回一个Series
**prefix **: str, default None
在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, ...
**mangle_pe_cols **: boolean, default True
重复的列,将‘X’...’X’表示为‘X.0’...’X.N’。如果设定为false则会将所有重名列覆盖。
dtype : Type name or dict of column -> type, default None
每列数据的数据类型。例如 {‘a’: np.float64, ‘b’: np.int32}
**engine **: {‘c’, ‘python’}, optional
Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
使用的分析引擎。可以选择C或者是python。C引擎快但是Python引擎功能更加完备。
converters : dict, default None
列转换函数的字典。key可以是列名或者列的序号。
true_values : list, default None
Values to consider as True
false_values : list, default None
Values to consider as False
**skipinitialspace **: boolean, default False
忽略分隔符后的空白(默认为False,即不忽略).
skiprows : list-like or integer, default None
需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
skipfooter : int, default 0
从文件尾部开始忽略。 (c引擎不支持)
skip_footer : int, default 0
不推荐使用:建议使用skipfooter ,功能一样。
nrows : int, default None
需要读取的行数(从文件头开始算起)。
na_values : scalar, str, list-like, or dict, default None
一组用于替换NA/NaN的值。如果传参,需要制定特定列的空值。默认为‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
**keep_default_na **: bool, default True
如果指定na_values参数,并且keep_default_na=False,那么默认的NaN将被覆盖,否则添加。
**na_filter **: boolean, default True
是否检查丢失值(空字符串或者是空值)。对于大文件来说数据集中没有空值,设定na_filter=False可以提升读取速度。
verbose : boolean, default False
是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。
skip_blank_lines : boolean, default True
如果为True,则跳过空行;否则记为NaN。
**parse_dates **: boolean or list of ints or names or list of lists or dict, default False
infer_datetime_format : boolean, default False
如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型,如果可以转换,转换方法并解析。在某些情况下会快5~10倍。
**keep_date_col **: boolean, default False
如果连接多列解析日期,则保持参与连接的列。默认为False。
date_parser : function, default None
用于解析日期的函数,默认使用dateutil.parser.parser来做转换。Pandas尝试使用三种不同的方式解析,如果遇到问题则使用下一种方式。
1.使用一个或者多个arrays(由parse_dates指定)作为参数;
2.连接指定多列字符串作为一个列作为参数;
3.每行调用一次date_parser函数来解析一个或者多个字符串(由parse_dates指定)作为参数。
**dayfirst **: boolean, default False
DD/MM格式的日期类型
**iterator **: boolean, default False
返回一个TextFileReader 对象,以便逐块处理文件。
chunksize : int, default None
文件块的大小, See IO Tools docs for more information on iterator and chunksize.
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
直接使用磁盘上的压缩文件。如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’这些为后缀的文件,否则不解压。如果使用zip,那么ZIP包中国必须只包含一个文件。设置为None则不解压。
新版本0.18.1版本支持zip和xz解压
thousands : str, default None
千分位分割符,如“,”或者“."
decimal : str, default ‘.’
字符中的小数点 (例如:欧洲数据使用’,‘).
float_precision : string, default None
Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter, and round_trip for the round-trip converter.
指定
**lineterminator **: str (length 1), default None
行分割符,只在C解析器下使用。
**quotechar **: str (length 1), optional
引号,用作标识开始和解释的字符,引号内的分割符将被忽略。
quoting : int or csv.QUOTE_* instance, default 0
控制csv中的引号常量。可选 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
doublequote : boolean, default True
双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
escapechar : str (length 1), default None
当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
comment : str, default None
标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。这个参数只能是一个字符,空行(就像skip_blank_lines=True)注释行被header和skiprows忽略一样。例如如果指定comment='#' 解析‘#empty a,b,c 1,2,3’ 以header=0 那么返回结果将是以’a,b,c'作为header。
encoding : str, default None
指定字符集类型,通常指定为'utf-8'. List of Python standard encodings
dialect : str or csv.Dialect instance, default None
如果没有指定特定的语言,如果sep大于一个字符则忽略。具体查看csv.Dialect 文档
tupleize_cols : boolean, default False
Leave a list of tuples on columns as is (default is to convert to a Multi Index on the columns)
error_bad_lines : boolean, default True
如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。
warn_bad_lines : boolean, default True
如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。
**low_memory **: boolean, default True
分块加载到内存,再低内存消耗中解析。但是可能出现类型混淆。确保类型不被混淆需要设置为False。或者使用dtype 参数指定类型。注意使用chunksize 或者iterator 参数分块读入会将整个文件读入到一个Dataframe,而忽略类型(只能在C解析器中有效)
**buffer_lines **: int, default None
不推荐使用,这个参数将会在未来版本移除,因为他的值在解析器中不推荐使用
compact_ints : boolean, default False
不推荐使用,这个参数将会在未来版本移除
如果设置compact_ints=True ,那么任何有整数类型构成的列将被按照最小的整数类型存储,是否有符号将取决于use_unsigned 参数
use_unsigned : boolean, default False
不推荐使用:这个参数将会在未来版本移除
如果整数列被压缩(i.e. compact_ints=True),指定被压缩的列是有符号还是无符号的。
memory_map : boolean, default False
如果使用的文件在内存内,那么直接map文件使用。使用这种方式可以避免文件再次进行IO操作。
ref:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html
㈨ 如何安装python中的parsel
python-parsel
Parsel是一个使用XPath和CSS选择器(可选地与正则表达式结合)从HTML和XML提取数据的库
一、安装
官网:https://pypi.org/project/parsel/
pip安装:pip install parsel 默认安装的是最新版
pip install parsel=1.6.0 目前官方最新版本
PyCharm:File =》Setting =》Project:sintemple =》 Project:Interpreter =》点击右上角的加号(或者按快捷键Alt+Insert)=》在输入框中输入parsel,会出现一个只有parsel的一列,点击选择它 =》Install Package 等待安装完成就可以了(注:其中Specify version选中可以在下拉框中选择版本)
————————————————
三、csstranslator
TranslatorMixin
This mixin adds support to CSS pseudo elements via dynamic dispatch.Currently supported pseudo-elements are ::text and ::attr(ATTR_NAME).
①. xpath_attr_functional_pseudo_element(xpath, function)
Support selecting attribute values using ::attr() pseudo-element
②. xpath_element(selector)
③. xpath_pseudo_element(xpath, pseudo_element)
Dispatch method that transforms XPath to support pseudo-element
④. xpath_text_simple_pseudo_element(xpath)
Support selecting text nodes using ::text pseudo-element
XPathExpr(path=’’, element=’*’, condition=’’, star_prefix=False)
GenericTranslator
HTMLTranslator(xhtml=False)
四、utils
extract_regex(regex, text, replace_entities=True)
Extract a list of unicode strings from the given text/encoding using the following policies: * if the regex contains a named group called “extract” that will be returned * if the regex contains multiple numbered groups, all those will be returned (flattened) * if the regex doesn’t contain any group the entire regex matching is returned
flatten(sequence) → list
Returns a single, flat list which contains all elements retrieved from the sequence and all recursively contained sub-sequences (iterables). Examples: >>> [1, 2, [3,4], (5,6)] [1, 2, [3, 4], (5, 6)] >>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, (8,9,10)]) [1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10] >>> flatten([“foo”, “bar”]) [‘foo’, ‘bar’] >>> flatten([“foo”, [“baz”, 42], “bar”]) [‘foo’, ‘baz’, 42, ‘bar’]
iflatten(sequence) → Iterator
Similar to .flatten(), but returns iterator instead
shorten(text, width, suffix=’…’)
Truncate the given text to fit in the given width.
————————————————
原文链接:网页链接
㈩ python中集合的特点和注意点
1、集合概念
Python中的集合,是一个无序的、没有重复项的集。它支持数学概念上的集合操作,如交集、并集、补集和差集。集合是可变的,可以在其中添加或删除项。集合用花括号“{}”括起来,并用逗号“,”来分隔其中的项。
2、创建集合
可以使用花括号“{}”创建集合,集合会自动去除重复的项。下面的集合包含了几种用字符串表示的水果:
>>>#创建fruits集合时,'apple'出现了两次
>>>fruits={'apple','banana','watermelon','strawberry','apple'}
>>>fruits#查看fruits集合,'apple'只有保留了一个
{'apple','strawberry','banana','watermelon'}
>>>fruits=set(['apple','banana','watermelon','strawberry','apple'])#以列表为参数创建集合
>>>fruits
{'apple','strawberry','banana','watermelon'}
>>>numbers=set((1,2,3,3,2,4))#以元组为参数创建集合
>>>numbers
{1,2,3,4}
>>>letters=set('banana')#以字符串为参数创建集合
>>>letters
{'b','a','n'}
>>>empty={}
>>>empty
{}
>>>type(empty)
<class'dict'>
>>>empty=set()
>>>empty#空集合表示为set()
set()
>>>type(empty)
<class'set'>
>>>numbers={1,2,3}
>>>numbers.add(4)#向numbers集合中添加整数4
>>>numbers
{1,2,3,4}
>>>numbers.add('five')#向numbers集合中添加字符串'five'
>>>numbers
{1,2,3,4,'five'}
>>>numbers.add((5,6,7))#向numbers集合中添加元组(5,6,7)
>>>numbers
{1,2,3,4,(5,6,7),'five'}
>>>fruits={'apple','strawberry','banana','watermelon'}
>>>fruits
{'banana','apple','watermelon','strawberry'}
>>>fruits.add('apple')#添加已经存在的项'apple'
>>>fruits#fruits集合并没有改变
{'banana','apple','watermelon','strawberry'}
>>>numbers={1}
>>>numbers
{1}
>>>numbers.update((5,6,7))
>>>numbers#可以看出update()方法和add()方法的区别
{1,5,6,7}
>>>numbers.update({4,5},{6,7,8})#参数为两个集合
>>>numbers
{1,4,5,6,7,8}
>>>numbers={1,2,3,5,7}
>>>numbers.remove(1)
>>>numbers
{2,3,5,7}
>>>numbers.remove(3)
>>>numbers
{2,5,7}
>>>numbers={1,2,3,5,7}
>>>numbers.remove(4)
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
KeyError:4
>>>numbers={1,2,3,5,7}
>>>numbers.discard(1)
>>>numbers
{2,3,5,7}
>>>numbers.discard(3)
>>>numbers
{2,5,7}
>>>numbers.discard(4)
>>>numbers#什么也没发生
{2,5,7}
>>>numbers={1,2,3,5,7}
>>>1innumbers#1在numbers集合中,返回True
True
>>>3innumbers#3在numbers集合中,返回True
True
>>>4innumbers#4不在numbers集合中,返回False
False
>>>4notinnumbers#notin是in的反向操作
True
>>>empty=set()
>>>len(empty)
0
>>>numbers={1,2,3,5,7}
>>>len(numbers)
5
与列表、元组、字典一样,集合也可以用工厂函数set()来创建。set()函数的参数要么为空,要么为可迭代对象(如列表、元组和字符串):
如果想要创建一个空集合,那么使用空的花括号“{}”是行不通的,因为这样创建的是一个空字典:
创建空集合的唯一方式就是使用不包含任何参数的set()函数:
3、集合添加项
集合是可变的数据类型,在创建集合之后,可以使用集合的add()方法向其添加项:
如果向某个集合中添加已经存在的项,那么什么也不会发生:
也可以使用集合的update()方法向集合中添加项,参数必须是可迭代对象,如列表、字符串或另一个集合。类似于列表的append()方法和extend()方法,但区别是集合的update()方法总是会将可迭代对象“展开”:
4、集合删除项
可以使用集合的remove()方法删除某个集合中的指定项:
如果试图删除集合中不存在的项,那么Python解释器会报错:
还可以使用集合的discard()方法来删除项,它和remove()方法唯一的区别是,当试图删除不存在的项时,discard()方法并不会报错,而是什么也不会发生:
5、检查某个项是否在集合中
集合的in操作符用于检查指定项是否在集合中,not in操作符用于检查指定项是否不在集合中:
6、查看集合的长度
集合的内建函数len()用于查看集合的长度,即集合中项的个数: