小代码
博客专区 > dfkjih 的博客 > 博客详情
小代码
dfkjih 发表于2年前
小代码
  • 发表于 2年前
  • 阅读 25
  • 收藏 0
  • 点赞 1
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

1. 对一段字符串按指定长度分割

aa = 'aaabbbcccdddfffggg'
def chunks(l, n):
    for i in range(0, len(l), n):
        yield l[i:i+n]
x = list(chunks(aa, 3))
print(x)     #['aaa', 'bbb', 'ccc', 'ddd', 'fff', 'ggg']


推导式:

print(list(aa[i:i+3] for i in range(0, len(aa), 3)))


2. 合并列表中的列表为一个列表

aa = [['qq'],['ww'],['ee']]
x = [i for n in aa for i in n]
print(x)#['qq', 'ww', 'ee']


3. 使用dict格式化输出

foo = {'name':'sun'}
aa = 'this is show dict %(name)s' % foo
print(aa)    #this is show dict sun


4. 形参对象魔法

def try_to_change_1(n):
    n = "another"
name = "other"
try_to_change_1(name)
print name #output:other  name不会改变

def try_to_change_2(n):
    n[0] = "another"
names = ["name1", "name2", "name3"]
try_to_change_2(names)
print name #这次可以改变name的值

为什么trytochange_1不会改变name的值?实际两个函数做的事情如下:

#1

name = "other"

n = name

n = "another"

#2

name = [x, x, x]

n = name

n[0] = "another"

如果你知道Python里的对象引用,自然就会明白。如果想要避免trytochange_2的情况,可以复制一个列表的副本:

names = ["name1", "name2", "name3"]

n = names[:]

5. reload(sys)

import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)


6. python 编码问题

6.1 创建中文目录

python 2.X  os.mkdir() 创建中文文件夹的时候,会报错

在代码头部加入:from __future__ import unicode_literals

即可

from __future__ import unicode_literals
import os
path=r'D:\tmp\哈哈'
os.mkdir(path)

6.2 2.x 将中文写入/读取文件

#coding: U8
aa = u'得到fdfsf'
with open('sun.log', 'w') as f:
    f.write(aa.encode('U8'))
with open('sun.log') as f:
    x = f.read().decode('U8')
    print(x)

6.3 3.x 爬虫抓取内容含中文

windows下将抓取到的网页保存之文本中,出现报错:

'gbk' codec can't encode character

解析:

在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,

然而txt此时已经是 decode过的unicode编码,这样的话就会导致解析不了,出现上述问题。 解决的办法就是,改变目标文件的编码:

f = open("out.html","w",encoding='utf-8')


7. 切片用法

中括号里两个冒号,那么两个冒号后面的数代表步长,就是隔几个元素取一次。

a = '122345678'
print(a[1::4])     #25
a = '122345678'
print(a[::4])    #148

8. 随机生成大小写数字字符串

import string, random
x = ''.join(random.choice(string.ascii_letters + string.digits) for x in range(5))
print(x)

9. 下载文件

# Python 2 code
import urllib
import urllib2
import requests
               
url = 'http://192.168.1.100/test.zip'
               
print "downloading with urllib"
urllib.urlretrieve(url, "code.zip")
               
print "downloading with urllib2"
f = urllib2.urlopen(url)
data = f.read()
with open("code2.zip", "wb") as code:
    code.write(data)
               
print "downloading with requests"
r = requests.get(url)
with open("code3.zip", "wb") as code:
    code.write(r.content)

10. 字符串格式化

>>> "{key}={value}".format(key="a", value=10) # 使⽤命名参数
'a=10'
>>> "[{0:<10}], [{0:^10}], [{0:*>10}]".format("a") # 左中右对⻬
'[a         ], [    a     ], [*********a]'
>>> "{0.platform}".format(sys) # 成员
'darwin'
>>> "{0[a]}".format(dict(a=10, b=20)) # 字典
'10'
>>> "{0[5]}".format(range(10)) # 列表
'5'
>>> "My name is {0} :-{{}}".format('Fred') # 真得想显示{},需要双{}
'My name is Fred :-{}'
>>> "{0!r:20}".format("Hello")
"'Hello'             "
>>> "{0!s:20}".format("Hello")
'Hello               '
>>> "Today is: {0:%a %b %d %H:%M:%S %Y}".format(datetime.now())
'Today is: Mon Mar 31 23:59:34 2014'
(PEP3101)

11. 将变量保存在文件中

#config.py
a = 1
#main.py
import config
print('a = %s' %config.a)


12. 拷贝和深拷贝

1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。

2. copy.deepcopy 深拷贝 拷贝对象及其子对象

一个很好的例子:

import copy
a = [1, 2, 3, 4, ['a', 'b']]  #原始对象
b = a  #赋值,传对象的引用
c = copy.copy(a)  #对象拷贝,浅拷贝
d = copy.deepcopy(a)  #对象拷贝,深拷贝
a.append(5)  #修改对象a
a[4].append('c')  #修改对象a中的['a', 'b']数组对象
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
输出结果:
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]
  • 思路一:利用切片操作和工厂方法list方法拷贝就叫浅拷贝,只是拷贝了最外围的对象本身,内部的元素都只是拷贝了一个引用而已。

  • 思路二:利用copy中的deepcopy方法进行拷贝就叫做深拷贝,外围和内部元素都进行了拷贝对象本身,而不是引用。

  • 但是对于数字,字符串和其他原子类型对象等,没有被拷贝的说法,即便是用深拷贝,查看id的话也是一样的,如果对其重新赋值,也只是新创建一个对象,替换掉旧的而已。

13. exec & eval

eval(str [,globals [,locals ]])
    函数将字符串str当成有效Python表达式来求值,并返回计算结果。
>>> eval('1+2+3')
6
>>> x = 1
>>> eval('x+2+3')
6
exec(object[, globals[, locals]]) 
    将字符串str当成有效Python代码来执行。
>>> exec('print("I Love FishC.com !!!")')
I Love FishC.com !!!
>>> exec('x = 520')
>>> x
520

14. try

打开文件:

try:
    f = open('不存在的文件')
    f.read()
    f.close()
except (OSError, TypeError) as e:
    print('文件出错啦,原因是:' + str(e))


15. 创建日期时间目录

import os
import time
folder=time.strftime(r'%m%d_%H%M',time.localtime())   #0129_1458
os.mkdir(os.getcwd()+'/'+folder)

16. 函数locals()

示例用法:   

if 'f' in locals():
        f.close()

如果变量f在当前局部变量中,则关闭。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 21
码字总数 13951
×
dfkjih
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: