Python常见用法汇总

1. 正则表达式匹配中文

当我们使用正则表达式匹配字符串中的中文中文时会发现字符串明明有目标串却不能匹配的情况

<span style="font-size:18px;">re.match(r'今天', str):</span>

字符串确实存在‘今天‘,解决办法只需要将中文转换为Unicode就行了:

<span style="font-size:18px;">re.match(ur'今天', post_time):</span>

2. python字典按照key和value排序

2.1 单次排序

需要注意使用sorted函数是,要得到排序的序列需要使用其返回值,即虽然经过sorted函数,但是原来的序列不保证有序:

dict = {'a': 1, 'c':3,'b': 2}
sorted_key_list = sorted(dict.items())
sorted_value_list = sorted(dict.items(),key=lambda item:item[1],reverse=True)
print('dict:',dict)
print('sorted_key_list:',sorted_key_list)
print('sorted_list:',sorted_value_list)

输出:

dict: {'a': 1, 'c': 3, 'b': 2}
sorted_key_list: [('a', 1), ('b', 2), ('c', 3)]
sorted_list: [('c', 3), ('b', 2), ('a', 1)]

2.2 二次排序

dict = {'a': (3, 1), 'c': (2, 3) ,'b': (1, 2)}
sorted_value_list = sorted(dict.items(),key=lambda item:(item[1][0], item[1][1]),reverse=True)

输出:

[('a', (3, 1)), ('c', (2, 3)), ('b', (1, 2))]

3. 获取一段文本的字典

试试下面的语句吧:

set_words = list(set([word for line in data.split('\n') for word in line])) 

4. 将词转为数字,或将数字转为词(接上)

int_to_vocab = {idx: word for idx, word in enumerate(set_words)}
vocab_to_int = {word: idx for idx, word in int_to_vocab.items()}

5. python list删除元素

删除元素,不能使用切片操作,必须使用list的pop()函数(默认删除最后一个,也可以指定index)或者del函数(指定index)。如我们要在二维list中每一行最多只能有两个元素,可以使用如下代码操作:

list = [['1','2','3','4'],['4','5','6','7'],['3']]
for tmp in list:
    if len(tmp)>2:
        for i in range(2,len(tmp)):
            tmp.pop()
print(list)

输出:[[‘1’, ‘2’], [‘4’, ‘5’], [‘3’]]

反之,若使用切片:

list = [['1','2','3','4'],['4','5','6','7'],['3']]
for tmp in list:
    if len(tmp)>2:
        tmp = tmp[:2]
print(list)

输出的还是原来的值。

6. ubuntu修改python为python2

rm /usr/bin/python
ln -s /usr/bin/python2 /usr/bin/python

7. No module named ‘tensorflow.python’

错误:

<span style="color:#ff0000">    from tensorflow.python.platform import gfile
ImportError: No module named 'tensorflow.python'</span>

原因:想要更改tensorflow代码,python3环境改成了python2

解决方法: 改成python3,然后卸载使用:

pip3 install --upgrade tensorflow

重新安装tensorflow

8.python中的lamda表达式简介

如:

print(lambda x: x*x)

相当于:

def square(x): return x*x print(square(x)

在tensorflow中的Seq2Seq的tutorial中,
model_with_buckets()函数中有一个lamda表达式:

lambda x, y: seq2seq_f(x, y, True)

x,y传入作为seq2seq的函数的参数,然后调用执行seq2seq函数。

9. python中从文件中读取列表list

在使用pandas写入文件的时候,列表数据默认是以列表的的形式写入的

如:['a','b','c']
但是当我们读出来的时候却是以字符串读取的,可以用split函数再次生成新的list,但是操作未免过于繁琐,设个时候假设我们的字符串的内容为:
list_str = '['a','b','c']'['a','b','c']'
为了避免再次生成list我们可以使用python里面提供的eval函数,即:
list =  eval(list_str)

这个时候返回的就是一个list

10. split多个字符乱码

使用Python的正则进行多个字符分割时出现乱码。代码如下:

>>> import re
>>> str = 'This,is,a sentence'
>>> re.split(r',,', str)

输出:

['This\xef\xbc\x8cis,a sentence']

这是因为有上述代码中,两个符号长短不一,需要使用|分割,修改如下:

>>> import re
>>> str = 'This,is,a sentence'
>>> re.split(r',|,', str)

输出:

['This', 'is', 'a sentence']

11. 输出表格格式

有时候为了方便观察结果,需要使用表格的形式直观展示。如下:

print('{:15} | {:^9} | {:^9}'.format('header', 'col1', 'col2'))
fmt = '{:15} | {:^9} | {:^9}'
print(fmt.format('row1', 'a', 'b'))

输出

header          |   col1    |   col2
row1            |     a     |     b

12. 查看字节码

可以使用python自带的dis库:

>>> import dis
>>> dis.dis('c=a+b')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 BINARY_ADD
              6 STORE_NAME               2 (c)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

13. 引入和父目录同级目录下的包

文件目录如下:

project/
├── conf
│   ├── model_config.py
└── src
├── test.py

如果想要在test文件中直接引入conf/model_config中的内容是不行的,增加以下三行就可以:

import sys
sys.path.append(".")
sys.path.append("..")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值