python常用函数总结

目录

1. os函数总结

2. json

3. 字典dict函数

 4. codecs.open 和一般的open 区别

5. itertools.chain.from_iterable

6. Python ljust() 方法

7. 全角和半角

8. ord()、chr()、unichr()

9.np.full、np.empty

 

1. os函数总结

  os.path.exists(self.DATA_OUTPUT_DIR):路径是否存在,返回True、False

  os.path.join(os.path.dirname(__file__), "../../"):拼接路径

  os.path.abspath():获取当前绝对路径

  os.makedirs():makedirs

  os.path.dirname的用法

语法:os.path.dirname(path) 
功能:去掉文件名,返回目录

print(os.path.dirname('W:\Python_File\juan之购物车.py'))
#结果
#W:\Python_File

os.path.dirname(__file__):返回脚本的路径

(__file__):__file__表示了当前文件的绝对路径

os.path.dirname(__file__)和os.path.dirname(“E:/Read_File/read_yaml.py”)是一个意思,得出os.path.dirname(__file__)就是得到当前文件的绝对路径

os.path.dirname(__file__)
Out[3]: 'G:/python/Machine_learning/NLP/Entity-Relation-Extraction-master/bin/predicate_classifiction'

但是需要注意一下几点:

  • 必须是实际存在的.py文件,如果在命令行执行,则会引发异常NameError: name '__file__' is not defined;
  • 在运行的时候如果输入完整的执行路径,则返回.py文件的全路径如:Python c:/test/test.py 则返回路径 c:/test ,如果是python test.py 则返回空;
  • 结合os.path.abspath用,效果会好,如果大家看过一些python架构的代码的话,会发现经常有这样的组合:os.path.dirname(os.path.abspath(__file__)),os.path.abspath(__file__)返回的是.py文件的绝对路径。

2. json

  • dump 和 dumps 都实现了序列化
  • load 和 loads 都实现反序列化

    变量从内存中变成可存储或传输的过程称之为序列化,序列化是将对象状态转化为可保存或可传输格式的过程。

   变量内容从序列化的对象重新读到内存里称之为反序列化,反序列化是流转换为对象。

3. 字典dict函数

Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

dict.setdefault(key, default=None)

 4. codecs.open 和一般的open 区别

       https://www.cnblogs.com/buptldf/p/4805879.html

      open:内置函数

      总结一下:文件读尽量用codecs.open方法,一般不会出现编码的问题。

     python读写文件估计大家都用open内置函数,或者file这个工厂函数,这两个的效果基本一样。

      打开文件的方式一般为:f=open(file_name,access_mode = 'r',buffering = -1)。file_name就是文件的路径加文件名字,不加路径则文件会存放在python程序的路径下,

     access_mode就是操作文件的模式,主要有r,w,rb,wb等,细节网上一大堆,buffering = -1是用于指示访问文件所采用的缓存方式。0表示不缓存;1表示只缓存一行,n代表缓存n行。如果不提供或为负数,则代表使用系统默认的缓存机制。

      打开以后就是写和读的操作。但是用open方法打开会有一些问题。open打开文件只能写入str类型,不管字符串是什么编码方式。

5. itertools.chain.from_iterable

itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用。

chain:组合工具

我们可以通过组合原有循环器,来获得新的循环器。

chain链接可遍历对象(iter1, iter2, ..., iterN)
        给出一组迭代器(iter1, iter2, ..., iterN),此函数创建一个新迭代器来将所有的迭代器链接起来,返回的迭代器从iter1开始生成项,知道iter1被用完,然后从iter2生成项,这一过程会持续到iterN中所有的项都被用完。

   from itertools import chain  
    test = chain('AB', 'CDE', 'F')  
    for el in test:  
        print el  
     
结果: 
    A  
    B  
    C  
    D  
    E  
    F 

chain.from_iterable(iterables)

一个备用链构造函数,其中的iterables是一个迭代变量,生成迭代序列,此操作的结果与以下生成器代码片段生成的结果相同:

>>> def f(iterables):  
    for x in iterables:  
        for y in x:  
            yield y  
  
>>> test = f('ABCDEF')  
>>> test.next()  
'A'  
  
  
>>> from itertools import chain  
>>> test = chain.from_iterable('ABCDEF')  
>>> test.next()  
'A'  

Flattening lists扁平列表的不同实现方式:

list(itertools.chain.from_iterable(a))

>>> a = [[1, 2], [3, 4], [5, 6]]
>>> list(itertools.chain.from_iterable(a))
[1, 2, 3, 4, 5, 6]

6. Python ljust() 方法

返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

语法

str.ljust(width[, fillchar])

参数

  • width -- 指定字符串长度。
  • fillchar -- 填充字符,默认为空格。

实例

以下实例展示了ljust()的使用方法:

#!/usr/bin/python

str = "this is string example....wow!!!";
print str.ljust(50, '0');

以上实例输出结果如下:
this is string example....wow!!!000000000000000000

7. 全角和半角

        首先介绍一下什么是全角和半角:全角字符unicode编码从65281~65374 (十六进制 0xFF01 ~ 0xFF5E),半角字符unicode编码从33~126 (十六进制 0x21~ 0x7E),空格比较特殊,全角为 12288(0x3000),半角为 32(0x20)。除空格外,全角/半角按unicode编码排序在顺序上是对应的(半角 + 65248 = 全角)。那代码就好写了。


   1 def DBC2SBC(ustring):
   2     n = []
   3     # python3现在已经将unichr和chr合并,所以网上的代码已经不合适
   4     for char in ustring:
   5         num = ord(char)
   6         if num == 0x3000:
   7             num = 32
   8         elif 0xFF01 <= num <= 0xFF5E:
   9             num -= 0xfee0
  10         num = chr(num)
  11         n.append(num)
  12     return ''.join(n)
  13 
  14 if __name__ == '__main__':
  15     a = '《中文》(213)'
  16     print(a)
  17     print(DBC2SBC(a))

8. ord()、chr()、unichr()

ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

>>> ord('a')
97
>>> ord('b')
98
>>> ord('c')
99

 chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个当前整数对应的 ASCII字符。

>>> print chr(0x30), chr(0x31), chr(0x61)   # 十六进制
0 1 a
>>> print chr(48), chr(49), chr(97)         # 十进制
0 1 a

unichr() 函数 和 chr()函数功能基本一样, 只不过是返回 unicode 的字符。

>>> unichr(97)
u'a'
>>> unichr(98)
u'b'
>>> unichr(99)
u'c'

9.np.full、np.empty

(1)np.full

构造一个数组,用指定值填充其元素。

full(shape, fill_value, dtype=None, order='C')

  • shape:int 或者 int元组
  • fill_value:填充到数组中的值
import numpy as np
 
# 构造一个2x3的数组,其中元素全部都为 7
ndarray = np.full((2, 3), 7)
print(ndarray)

"""
[[7 7 7]
 [7 7 7]]

(2)np.empty

构造一个长度为 shape 的未初始化数组,这个数组的元素可能是内存位置上存在的任何数值。

empty(shape, dtype=float, order='C')

  • shape : int 或者 int元组
  • dtype : 数组中元素的格式
  • order : 'C' 或 'F', 分别代表,行优先row-major (C-style)和列优先column-major (Fortran-style),表示在计算机内存中的存储元素的顺序。

10. collections.namedtuple

 namedtuple是继承自tuple的子类,创建一个和tuple类似的对象,而且对象拥有可访问的属性。

namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问数据,能够迭代,更能够方便的通过属性名来访问数据。在python中,传统的tuple类似于数组,只能通过下标来访问各个元素,我们还需要注释每个下标代表什么数据。通过使用namedtuple,每个元素有了自己的名字,类似于C语言中的struct,这样数据的意义就可以一目了然了。当然,声明namedtuple是非常简单方便的。

from collections import namedtuple

# 1.定义一个namedtuple类型User,并包含name,sex和age属性。
User = namedtuple('User', 'name sex age')
User = namedtuple('User', ['name', 'sex', 'age'])

# 2.创建一个User对象
user1 = User(name='小红', sex='女', age='22')
user1 = User('小红','女', '22')

# 也可以通过一个list、dict来创建一个User对象,使用"_make"方法
user2 = User._make(['小明', '男', '21'])   
user3 = User._make({'name':'小王', 'sex':'男', 'age':'19'})

name, sex, age=user1

# 3.获取用户的属性
print(user1.name)   # 小红,女,22
print(user1.sex)
print(user1.age)

# 4.修改对象属性,注意要使用"_replace"方法
user11 = user1._replace(age=25)
print(user)   # User(name='小红', sex='女', age='25')

# 5.将User对象转换成字典,注意要使用"_asdict"
user2._asdict()
# OrderedDict([('name', '小明'), ('sex', '男'), ('age', '21')])
print(user2)  # User(name='小明', sex='男', age='21')

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满腹的小不甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值