python常用函数总结

mac2025-08-02  4

目录

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')

 

 

 

最新回复(0)