您的位置:首页 > 编程语言 > Python开发

python 学习笔记(4)解析和字符串处理

2013-05-07 14:53 776 查看
 

声明:本文系本人学习python3总结,如有侵权等,请及时告知;

                       欢迎转载:请保留http://blog.csdn.net/kevinx_xu/article/details/8895186

 

一、解析

         1、os 模块

                  Python 3 带有一个模块叫做 os,代表 “操作系统(operating system)。

                   导入osmodule  import os

                   使用os.getcwd() 函数获得当前工作目录。

                   使用os.chdir()函数改变当前工作目录  

         2、处理文件名和目录名

                   1)o.path方法

                   os.path.join() 函数从一个或多个路径片段中构造一个路径名。 在这个例子中, 它仅仅是简单的拼接字符串.  

                   os.path.expanduser() 用来将包含~符号(表示当前用户ome目录)的路径扩展为完整的路径。在任何有Home 目录概念的操作系统上(包括Linux,Mac OS X 和Windows),这个函数都能工作。返回的路径不以斜杠结尾,但是
os.path.join()并不介意这一点。  

                   os.path.split(path)split 函数分割一个完整路径并返回目录和文件名 将split函数的返回值赋值给一个二元组。每个变量获得了返回元组中的对应元素的值。  一个元组;

                   os.path 也包含os.path.splitext() 函数,它分割一个文件名并返回短文件名和扩展名。可以使用同样的技术将它们的值赋值给不同的变量。  

                   os.stat('filename')根据文件名获取文件的信息

                            os.stat() 函数返回一个包含多种文件元信息的对象。

                  eg:

                           os.stat('./test.c')

                           posix.stat_result(st_mode=33279,st_ino=5379962, st_dev=2050L, st_nlink=1, st_uid=1001, st_gid=1001,st_size=57894, st_atime=1367578807, st_mtime=1367579345, st_ctime=1367579345)

                   os.system('ls-al')用于执行当前系统的命令

                   os.path.realpath(filename)函数 以当前目录为绝对路径,根据文件名构造一个绝对路径以供其他函数使用;

                   更多关于os对文件及目录的查看,请参考

                   http://blog.csdn.net/kevinx_xu/article/details/8875300

         3、罗列目录内容(主要是通过可以使用通配符)

                   glob 模块是Python标准库中的另一个工具,它可以通过编程的方法获得一个目录的内容,并且它使用熟悉的命令行下的通配符。 glob 模块使用shell风格的通配符。  

                   注意:如果是隐藏文件,请在前边加上.*

         4.列表解析

                   列表解析提供了一种紧凑的方式,实现了通过对列表中每一个元素应用一个函数的方法来将一个列表映射到另一个列表.  

                   列表解析创造一个新的列表而不改变原列表。  

                    [elem * 2 for elem in a_list] 

                   列表解析可以使用任何表达式;

         5、字典解析

                   字典解析。 除了两点以外,它的语法同列表解析很类似。首先,它被花括号而不是方括号包围; 第二,对于每一个元素它包含由冒号分隔的两个表达式,而不是列表解析的一个。冒号前的表达式是字典的键;冒号后面的表达式是值。

         6、集合解析

                   集合也有自己的集合解析的语法。它和字典解析的非常相似,唯一的不同是集合只有值而没有键:值对。  

 

二、字符串

         1.字符串格式转换

                  {0}
、{1} ..{n}代表.format(1,2);的第一个和第二个属性...第n个属性;

                   eg:"this is a {0} {1}".format('test', 'program')

         如果参数为list,tuple, set

                  • 使用模块作为参数,并且通过名字来访问其变量及函数  

                   • 使用类的实例作为参数,并且通过名字来访问其方法和属性  

                   • 以上方法的任意组合 • 使用列表作为参数,并且通过下标索引来访问其元素(跟上一例类似)  

                   • 使用字典作为参数,并且通过键来访问其值  

 

         2、'{0.modules[test].list[1][0]'.format(sys) 

sys 模块保存了当前正在运行的Python实例的信息。由于已经导入了这个模块,因此可以将其作为format()方法的参数。所以替换域{0}指代sys模块。

         3、格式说明符

                   '{0:.1f} {1}'.format(10.28, 100) 

                   :0.1f第二部分(包括冒号及其后边的部分)即格式说明符(format specifier),它进一步定义了被替换的变量应该如何被格式化。  

                   “.1”的意思是四舍五入到保留一们小数点。“f”的意思是定点数(与指数标记

法或者其他10
进制数表示方法相对应)

         4、字符串的分片

                   test= 'abcdefg'

                   字符串分片跟列表的分片(slicing lists)原理是一样的,从直观上也说得通,因为字符串本身就是一些字符序列。 

                   test[0:n]

         5、字符和字节的关系

                   字节即字节;字符是一种抽象。一个不可变(immutable)的Unicode编码的字符序列叫做string。一串由0到255之间的数字组成的序列叫做bytes对象。  

                   1)定义byte类型

                           
使用“byte 字面值”语法b''来定义bytes对象。byte字面值里的每个字节可以是ASCII字符或者是从\x00到\xff编码了的16进制数。  

                            eg:注意.\x代表16进制,65的HEX对应的是41在bytes处理的仅能支持\x

                                     >>>a_byte =b'\x41 bc'

                                     >>>a_byte

                                               b'Abc'

                   2)bytes对象的类型是bytes。  

                   3) 
跟列表和字符串一样,我们可以通过内置函数len()来获得bytes对象的长度。  

                   4)使用+操作符可以连接bytes对象。操作的结果是一个新的bytes对象。  

                   5) 
连接5 个字节的和1个字节的bytes对象会返回一个6字节的bytes对象。  

                   6)一如列表和字符串,可以使用下标记号来获取bytes对象中的单个字节。对字符串做这种操作获得的元素仍为字符串,而对bytes对象做这种操作的返回值则为整数。确切地说,是0–255之间的整数。  

                   7)bytes我们不可以给单个字节赋上新值。如果需要改变某个字节,可以组合使用字符串的切片和连接操作;或者我们也可以将bytes对象转换为bytearray对象。 

 

                   技巧:

                   1. 
使用内置函数bytearray()来完成从bytes对象到可变的bytearray对象的转换。  

                  2. 所有对bytes对象的操作也可以用在bytearray对象上。  

                  3. 有一点不同的就是,我们可以使用下标标记给bytearray对象的某个字节赋值。并且,这个值必须是0–255之间的一个整数。 

                   4.再通过bytes()将bytearray类型的数据转换为bytes的数据类型;

        

        
         注意:

                   1)不能连接bytes对象和字符串。他们两种不同的数据类型。 

                   2)bytes类型与 string类型的转换

                   bytes对象有一个decode()方法,它使用某种字符编码作为参数,然后依照这种编码方式将bytes对象转换为字符串,对应地,字符串有一个encode()方法,它也使用某种字符编码作为参数,然后依照它将串转换为bytes对象。

                   eg:

                   /******************************************/

                   >>>s = 'this is test'

                   >>>s

                   'thisis test'

                   >>>a_byte = bytes(s.encode('ascii'))

                   >>>a_byte

                   b'thisis test'

                   >>>s = None

                   >>>s = str(a_byte.decode('ascii'))

                   >>>s

                   'thisis test'

                   >>>a_byte

                   b'thisis test'

                   >>>

                   /**********************************************/

                   >>>s = '中国'

                   >>>s

                   '中国'

                   >>>a_byte = bytes(s.encode('utf-8'))

                   >>>a_byte

                   b'\xe4\xb8\xad\xe5\x9b\xbd'

                   >>>s = None

                   >>>s

                   >>>s = str(a_byte.decode('utf-8'))

                   >>>s

                   '中国'

                   >>>s = str(a_byte.decode('ascii'))

                   Traceback(most recent call last):

                            File "<stdin>", line 1, in<module>

                   UnicodeDecodeError:'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in                 range(128)

                   >>>s = str(a_byte.decode('utf-32'))

                   Traceback(most recent call last):

                     File "<stdin>", line 1, in<module>

                   UnicodeDecodeError:'utf32' codec can't decode bytes in position 0-3: codepoint not in              range(0x110000)

                   >>>s = str(a_byte.decode('utf-16'))

                   >>>s

                   '룤\ue5ad붛'

如上,对于不同的字符用什么编码,就必须用什么解码,每种字符都有自己的编码规则。

 

                   Python 3的源码的默认编码方式为UTF‐8 

                   修改python 3的源码编码方式

                   # ‐*‐ coding: windows‐1252 ‐*‐ 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: