我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Python基础】05、Python文

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Python基础】05、Python文

一、文件系统和文件

1、文件系统和文件

文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构——即在磁盘上组织文件的方法

计算机文件(或称文件、电脑档案、档案),是存储在某种长期储存设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管理之下

概括来讲:

       文件是计算机中由OS管理的具有名字的存储区域

       在Linux系统上,文件被看做是字节序列


2、linux文件系统组件的体系结构

wKioL1fcuJzgMDmgAAEBsoQn_y4470.png


3、Python打开文件

Python内置函数open()用于打开文件和创建文件对象

语法格式:

        open(name[,mode[,bufsize]])

open方法可以接收三个参数:文件名、模式和缓冲区参数

open函数返回的是一个文件对象

mode:指定文件的打开模式

bufsize:定义输出缓存

      0表示无输出缓存

      1表示使用缓冲

      负数表示使用系统默认设置

       正数表示使用近似指定大小的缓冲


4、文件的打开模式

简单模式:

       r: 只读   以读的方式打开,定位到文件开头

                 open(‘/var/log/message.log’,’r’)

       w: 写入   以写的方式打开,不能读,定位到文件开头,会清空文件内的数据

       a: 附加   以写的方式打开,定位到文件末尾

在模式后使用“+”表示同时支持输入、输出操作

        如r+、w+和a+

在模式后附加“b”表示以二进制方式打开

        如rb、wb+

In [4]: file.
file.close       file.isatty      file.read        file.tell
file.closed      file.mode        file.readinto    file.truncate
file.encoding    file.mro         file.readline    file.write
file.errors      file.name        file.readlines   file.writelines
file.fileno      file.newlines    file.seek        file.xreadlines
file.flush       file.next        file.softspace   


In [6]: f1=open('/etc/passwd','r')

In [7]: f1
Out[7]: <open file '/etc/passwd', mode 'r' at 0x21824b0>

In [8]: print f1
<open file '/etc/passwd', mode 'r' at 0x21824b0>

In [9]: type(f1)
Out[9]: file



In [10]: f1.next
Out[10]: <method-wrapper 'next' of file object at 0x21824b0>

In [11]: f1.next()   #文件也是可迭代对象,
Out[11]: 'root:x:0:0:root:/root:/bin/bash\n'

In [12]: f1.next()
Out[12]: 'bin:x:1:1:bin:/bin:/sbin/nologin\n'


In [22]: f1.close()      #关闭文件,

In [23]: f1.next()      #文件被关闭后,不能再读取数据
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-23-4a9d57471e88> in <module>()
----> 1 f1.next()

ValueError: I/O operation on closed file
In [50]: f1=open('/etc/passwd','r')

In [51]: f1.
f1.close       f1.isatty      f1.readinto    f1.truncate
f1.closed      f1.mode        f1.readline    f1.write
f1.encoding    f1.name        f1.readlines   f1.writelines
f1.errors      f1.newlines    f1.seek        f1.xreadlines
f1.fileno      f1.next        f1.softspace   
f1.flush       f1.read        f1.tell        

In [51]: f1.readl
f1.readline   f1.readlines  

In [51]: f1.readline
Out[51]: <function readline>

In [52]: f1.readline()
Out[52]: 'root:x:0:0:root:/root:/bin/bash\n'

In [53]: f1.readlines()
Out[53]: 
['bin:x:1:1:bin:/bin:/sbin/nologin\n',
 'daemon:x:2:2:daemon:/sbin:/sbin/nologin\n',
 'adm:x:3:4:adm:/var/adm:/sbin/nologin\n',
 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n',
 'sync:x:5:0:sync:/sbin:/bin/sync\n',
 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n',
 'halt:x:7:0:halt:/sbin:/sbin/halt\n',
 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n',
 'uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin\n',
 'operator:x:11:0:operator:/root:/sbin/nologin\n',
 'games:x:12:100:games:/usr/games:/sbin/nologin\n',
 'gopher:x:13:30:gopher:/var/gopher:/sbin/nologin\n',
 'ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\n',
 'nobody:x:99:99:Nobody:/:/sbin/nologin\n',
 'dbus:x:81:81:System message bus:/:/sbin/nologin\n',
 'vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin\n',
 'saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin\n',
 'postfix:x:89:89::/var/spool/postfix:/sbin/nologin\n',
 'haldaemon:x:68:68:HAL daemon:/:/sbin/nologin\n',
 'sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\n']

In [54]:

读取文件的指针:

In [57]: f1.tell()    #查看当前指针在文件中位置,返回的事,已读文件字节数
Out[57]: 949
In [69]: help(f1.seek)


Help on built-in function seek:

seek(...)
    seek(offset[, whence]) -> None.  Move to new file position.  
  #offse 偏移量,默认是0  whence从什么位置偏移,0表示从文件头开始偏移,1表示从当前位置开始偏移,2表示从文件尾开始偏移,默认是0     
    
    Argument offset is a byte count.  Optional argument whence defaults to
    0 (offset from start of file, offset should be >= 0); other values are 1
    (move relative to current position, positive or negative), and 2 (move
    relative to end of file, usually negative, although many platforms allow
    seeking beyond the end of a file).  If the file is opened in text mode,
    only offsets returned by tell() are legal.  Use of other offsets causes
    undefined behavior.
    Note that not all file objects are seekable.
(END) 

In [72]: f1.seek(0)          #没有指定whence默认是0从文件首部偏移0

In [73]: f1.tell()
Out[73]: 0
In [29]: help(file.read)

Help on method_descriptor:

read(...)
    read([size]) -> read at most size bytes, returned as a string.
    
    If the size argument is negative or omitted, read until EOF is reached.
    Notice that when in non-blocking mode, less data than what was requested
    may be returned, even if no size parameter was given.
In [82]: f1.read(10)        #返回最多10个字节的字符串
Out[82]: 'root:x:0:0'

In [83]: f1.tell()
Out[83]: 10


In [88]: f1.name
Out[88]: '/etc/passwd'


5、文件方法

wKioL1fcuZ3TD7fCAAI8vu9Z7x8038.png

文件对象维护它所打开文件的状态,其tell()方法返回当前在所打开的文件中的位置

read()方法用于将文件读进单一字符串,也可以为其指定要读取的字节数

readline():可以读取下一行到一个字符串,包括行尾的结束符

readlines():则读取整个文件的所有行至以行为单位的字符串列表中

write(aString):输出字节字符串到文件

writelines(aList):用于把列表内所有字符串写入文件

f.isatty():是否是终端设备文件

f.truncate:截取最大指定字节


注意:

       文件方法read()等在读取文件时,会一并读取其行结束符

       文件方法write()执行写出操作时,不会自动为其添加行结束符   


6、文件对象属性

wKiom1fcukrT4COtAACwzuToiHo688.png


with语法

     2.5开始支持with语法

  用于需要打开、关闭成对的操作

     可以自动关闭打开的对象     

语法:

      with open_expr as obj:

             expression

In [90]: f = open("/tmp/passwd","r+")

In [91]: f.closed
Out[91]: False

In [92]: with open("/tmp/passwd","r+") as f:
    pass
   ....: 

In [93]: f.closed
Out[93]: True


二、python文本处理

1、基本字符串处理

 1)字符串分隔和连接

  str.split()     分隔

  str.rsplit()   从右边开始分隔

In [11]: s1="xie xiao jun"


In [13]: help(s1.split)         


Help on built-in function split:

split(...)
    S.split([sep [,maxsplit]]) -> list of strings   #sep为分隔符,默认为空格  最大分隔次数
    
    Return a list of the words in the string S, using sep as the
    delimiter string.  If maxsplit is given, at most maxsplit
    splits are done. If sep is not specified or is None, any
    whitespace string is a separator and empty strings are removed
    from the result.
(END) 


In [12]: s1.spli
s1.split       s1.splitlines  

In [12]: s1.split()
Out[12]: ['xie', 'xiao', 'jun']

In [16]: s1.split("",2)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-f3d385e69a09> in <module>()
----> 1 s1.split("",2)

ValueError: empty separator

In [17]: s1.split(" ",2)
Out[17]: ['xie', 'xiao', 'jun']

In [18]: s1.split(" ",1)
Out[18]: ['xie', 'xiao jun']

In [26]: s1.split("x")
Out[26]: ['', 'ie ', 'iao jun']

In [27]: s1
Out[27]: 'xie xiao jun'

In [28]: s1.split("i")
Out[28]: ['x', 'e x', 'ao jun']

In [29]: s1.split("n")
Out[29]: ['xie xiao ju', '']



In [35]: s1.rsplit
s1.rsplit

In [37]: s1.rsplit()                #当设置的分隔次数足够的话rsplit和split没区别
Out[37]: ['xie', 'xiao', 'jun']

In [38]: s1.rsplit(" ",1)          #当设置的分隔次数不够时,rsplit从右边开始分隔
Out[38]: ['xie xiao', 'jun']

In [39]: s1.split(" ",1)
Out[39]: ['xie', 'xiao jun']

join()   +   连接

In [57]: s1
Out[57]: 'xie xiao jun'

In [58]: s2
Out[58]: 'aa bb cc dd ee'

In [59]: ",".join(s1)
Out[59]: 'x,i,e, ,x,i,a,o, ,j,u,n'

In [60]: "-".join(s1)
Out[60]: 'x-i-e- -x-i-a-o- -j-u-n'

In [67]: 'xie' + "jun"
Out[67]: 'xiejun'

 2)字符串格式化

 占位符替换  %s  %d|%i %f

In [75]: "adfas%s" % "hello"
Out[75]: 'adfashello'

In [76]: "adfas %s" % "hello"
Out[76]: 'adfas hello'

In [77]: "adfas %s " % "hello"
Out[77]: 'adfas hello '

In [78]: "adfas %s %s%s" % "hello"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-78-97faba8d8356> in <module>()
----> 1 "adfas %s %s%s" % "hello"

TypeError: not enough arguments for format string

In [80]: "adfas %s %s%s" % ("hello","A","B")  #站位符和元祖的元素个数要相同
Out[80]: 'adfas hello AB'

 3)字符串查找

  str.find()   查找

In [90]: help(s1.find)

Help on built-in function find:

find(...)
    S.find(sub [,start [,end]]) -> int
    
    Return the lowest index in S where substring sub is found,
    such that sub is contained within S[start:end].  Optional
    arguments start and end are interpreted as in slice notation.
    
    Return -1 on failure.
    
In [102]: s1.find("i")       #元素第一次出线的位置
Out[102]: 1    

In [101]: s1.find("i",4,8)
Out[101]: 5

4)字符串替换

str.replace()

In [104]: s1.replace("x","X")
Out[104]: 'Xie Xiao jun'

In [105]: s1.replace("x","X",1)
Out[105]: 'Xie xiao jun'

 5)str.strip()   移除字符串首尾的空白字符

       str.rstrip()   只去除右边的空白字符

       str.strip()     只去除左边的空白字符

In [21]: s2 = ' xie xiao jun '

In [22]: s2
Out[22]: ' xie xiao jun '

In [23]: s2.st
s2.startswith  s2.strip       

In [23]: s2.strip()
Out[23]: 'xie xiao jun'

In [24]: s2.r
s2.replace     s2.rindex      s2.rpartition  s2.rstrip      
s2.rfind       s2.rjust       s2.rsplit      

In [24]: s2.rstrip()
Out[24]: ' xie xiao jun'

In [25]: s2.l
s2.ljust   s2.lower   s2.lstrip  

In [25]: s2.lstrip()


三、os模块

目录不属于文件对象,输于文件系统,和文件系统打交道,要使用os模块

os模块常用的方法:

1、目录

     getcwd():获取当前工作目录       

        chdir():切换工作目录

        chroot():设定当前进程的根目录

        listdir():列出指定目录下的所有文件名

        mkdir():创建指定目录

        makedirs():创建多级目录

        rmdir():删除目录

        removedirs():删除多级目录

In [1]: import os

In [4]: help(os.mkdir)


Help on built-in function mkdir in module posix:

mkdir(...)
    mkdir(path [, mode=0777])
    
    Create a directory.
(END) 

In [2]: os.mkdir('/tmp/test')

In [3]: ls /tmp
passwd  vgauthsvclog.txt.0  yum_save_tx-2016-09-02-17-11cyWWR1.yumtx
test/   vmware-root/        yum_save_tx-2016-09-21-23-45jB1DoO.yumtx

In [6]: os.getcwd()
Out[6]: '/root'

In [7]: os.c
os.chdir          os.chroot         os.confstr        os.curdir
os.chmod          os.close          os.confstr_names  
os.chown          os.closerange     os.ctermid        

In [8]: os.chdir('/tmp')

In [9]: os.getcwd()
Out[9]: '/tmp'

In [10]: os.stat('test')
Out[10]: posix.stat_result(st_mode=16877, st_ino=522528, st_dev=2050L, st_nlink=2, st_uid=0, st_gid=0, st_size=4096, st_atime=1474959686, st_mtime=1474959686, st_ctime=1474959686)

2、文件

        mkfifo():创建匿名管道

        mknod():创建设备文件

        remove():删除文件

        unlink():删除链接文件

        rename():重命名

        stat():返回文件状态信息,适用于文件和目录

        symlink(): 创建链接

        utime():更新时间戳

        tmpfile():创建并打开(w+b)一个新的临时文件

        walk():目录生成器

In [49]: g1=os.walk('/tmp')

In [50]: g1.
g1.close       g1.gi_frame    g1.next        g1.throw       
g1.gi_code     g1.gi_running  g1.send        

In [50]: g1.next
Out[50]: <method-wrapper 'next' of generator object at 0x24f0050>

In [51]: g1.next()
Out[51]: 
('/tmp',
 ['x', 'test1', 'vmware-root', 'test', '.ICE-unix'],
 ['test2',
  'yum_save_tx-2016-09-02-17-11cyWWR1.yumtx',
  'vgauthsvclog.txt.0',
  'passwd',
  'yum_save_tx-2016-09-21-23-45jB1DoO.yumtx'])

3、访问权限
     access():判断指定用户对文件是否有访问权限

    chmod():修改权限

     chown():改变属者,属组

     umask():设置默认权限模式

In [66]: os.a
os.abort   os.access  os.altsep  

In [66]: os.access('/root',0)
Out[66]: True

In [67]: os.access('/root',100)
Out[67]: False

4、文件描述符

     open():系统底层函数,打开文件

     read():

     write():


5、设备文件

     mkdev():根据主设备号,次设备号创建设备

     major():

      minor():


四、os.path模块   

os.path是os模块的的子模块 

实现路径管理,文件路径字符串本身的管理

In [5]: os.path
Out[5]: <module 'posixpath' from '/usr/local/python27/lib/python2.7/posixpath.pyc'>
In [3]: os.path.
os.path.abspath                     os.path.join
os.path.altsep                      os.path.lexists
os.path.basename                    os.path.normcase
os.path.commonprefix                os.path.normpath
os.path.curdir                      os.path.os
os.path.defpath                     os.path.pardir
os.path.devnull                     os.path.pathsep
os.path.dirname                     os.path.realpath
os.path.exists                      os.path.relpath
os.path.expanduser                  os.path.samefile
os.path.expandvars                  os.path.sameopenfile
os.path.extsep                      os.path.samestat
os.path.genericpath                 os.path.sep
os.path.getatime                    os.path.split
os.path.getctime                    os.path.splitdrive
os.path.getmtime                    os.path.splitext
os.path.getsize                     os.path.stat
os.path.isabs                       os.path.supports_unicode_filenames
os.path.isdir                       os.path.sys
os.path.isfile                      os.path.walk
os.path.islink                      os.path.warnings
os.path.ismount

1、跟文件路径相关

basename():去文件路径基名

dirname():去文件路径目录名

join():将字符串连接起来

split():返回dirname(),basename()元祖

splitext():返回(filename,extension 扩展名)元祖

In [6]: os.path.basename('/tmp/passwd')
Out[6]: 'passwd'

In [7]: os.path.dirname('/tmp/passwd')
Out[7]: '/tmp'

In [8]: os.listdir('/tmp')
Out[8]: 
['x',
 'test2',
 'yum_save_tx-2016-09-02-17-11cyWWR1.yumtx',
 'test1',
 'vmware-root',
 'vgauthsvclog.txt.0',
 'passwd',
 'test',
 '.ICE-unix',
 'yum_save_tx-2016-09-21-23-45jB1DoO.yumtx']

In [9]: for filename in os.listdir('/tmp'):print os.path.join("/tmp",filename)
/tmp/x
/tmp/test2
/tmp/yum_save_tx-2016-09-02-17-11cyWWR1.yumtx
/tmp/test1
/tmp/vmware-root
/tmp/vgauthsvclog.txt.0
/tmp/passwd
/tmp/test
/tmp/.ICE-unix
/tmp/yum_save_tx-2016-09-21-23-45jB1DoO.yumtx


In [24]: os.path.split('/etc/sysconfig/network')
Out[24]: ('/etc/sysconfig', 'network')

2、文件相关信息

getatime():返回文件最近访问时间

getctime()

getmtime()

getsize():返回文件的大小


3、查询

exists():判断指定文件是否存在

isabs():判断指定路径是否为绝对路径

isdir():是否为目录

isfile():是否存在而且文件

islink():是否存在且为链接

ismount():是否为挂载点

samefile():两个路径是否指向同一个文件


五、pickle模块

Python程序中实现文件读取或写出时,要使用转换工具把对象转换成字符串

实现对象持久存储

把对象存储在文件中:

       pickle模块:

        marshal:

把对象存储在DB中:

       DBM接口(需要装载第三方接口):


shelve模块:既然实现流式化也能存在DB中

In [31]: l1=[1,2,3,"4",'abc']

In [34]: f1=open('/tmp/test2','a+')

In [36]: s1="xj"

In [37]: f1.write(s1)

In [40]: cat /tmp/test2

In [42]: f1.close()

In [43]: cat /tmp/test2
xj

In [47]: print l1
[1, 2, 3, '4', 'abc']

In [57]: f1.write(l1)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-57-83ae8c8c88d4> in <module>()
----> 1 f1.write(l1)

TypeError: expected a character buffer object      #期望字符缓存对象

pickle模块:

In [58]: import pickle

In [61]: help(pickle.dump)

Help on function dump in module pickle:

dump(obj, file, protocol=None)
(END) 


[root@Node3 tmp]# cat test2
hello

n [77]: pickle.dump(l1,f1)     #前面已经定义了l1和f1,f1要是已打开的文件

In [78]: f1.flush()

[root@Node3 tmp]# cat test2
hello                          
(lp0
I1
aI2
aI3
aS'4'
p1
aS'abc'
p2

In [105]: l2=pickle.load(f2)

In [106]: l2
Out[106]: [1, 2, 3, '4', 'abc']


六、Python中的正则表达式

   文件是可迭代对象,以行为单位迭代

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。


1、python中正则表达式的元字符

和bash中扩展正则表达式一样:

.,[],[^],  

        中括号用于指向一个字符集合比如[a-z],[a,b,c]

        中括号中可以使用元字符

        中括号中元字符.仅代表字面量

[0-9],\d(任意数字),\D(任意非数字)

[0-9a-zA-Z],\w,\W   

\s:任意空白字符:[\n\t\f\v\r],\S

?,+,{m},{m,n},{0,n},{m,}

^,$,\b,

|,(),\nn

(*|+|?|{})?:默认贪婪模式,在表示重复的元字符后面加个?非贪婪模式


捕获|分组

位置捕获:(...)

命名捕获:(?P<name>...)  #python所特有的


断言

      在目标字符串当前匹配位置的前面或后面进行的一种测试,但不占用字符

前向断言(?=...)      肯定    (?!...)  否定

后向断言(?<=...)    肯定    (?<!)  否定     

     ?是前向,?<是后向

 ?=是肯定 , ?! 是否定


2、re模块常用的方法

re.math():返回match对象

      属性:

               string

                re

                pos

                endpos

       方法:

               group() :分组,返回字符串

               groups():分组,返回以括号内的内容组成的元祖

               start()

               end()

re.search():第一次匹配到的字符,返回match对象

re.findall():匹配到的所有字符,返回一个列表

re.finditer():匹配到的所有字符,返回一个迭代器,内容是math对象

re.split(“m”,str):以m为分隔符,分割str,返回列表

re.sub():替换,返回字符串

re.subn():返回元祖

flags:

       I或IGNORECASE:忽略大小写

       M或MULTILINE:实现跨行匹配   #用的不多

        A或ASCII:仅执行8位ASCII码匹配

        U或UNICODE:

In [251]: import re

In [252]: re.
re.DEBUG        re.S            re.compile      re.search
re.DOTALL       re.Scanner      re.copy_reg     re.split
re.I            re.T            re.error        re.sre_compile
re.IGNORECASE   re.TEMPLATE     re.escape       re.sre_parse
re.L            re.U            re.findall      re.sub
re.LOCALE       re.UNICODE      re.finditer     re.subn
re.M            re.VERBOSE      re.match        re.sys
re.MULTILINE    re.X            re.purge        re.template


In [262]: re.match('a','abc')
Out[262]: <_sre.SRE_Match at 0x319b3d8>       #返回一个match对象

In [263]: match=re.match('a',"abc")

In [264]: match.         #match对象内部的相关属性或方法
match.end        match.groupdict  match.pos        match.start
match.endpos     match.groups     match.re         match.string
match.expand     match.lastgroup  match.regs       
match.group      match.lastindex  match.span     


In [264]: match.string     #匹配的字符串本身
Out[264]: 'abc'

In [266]: match.re
Out[266]: re.compile(r'a')    #匹配使用的文本,匹配时会自动编译

In [268]: match.group()     #greoup是一个方法,匹配到的字符串
Out[268]: 'a'

In [269]: match=re.match('a.',"abc")

In [270]: match.group()
Out[270]: 'ab'

In [271]: match.groups()   #以元祖方式返回所有匹配到的结果
Out[271]: ()



In [58]: str1="heelo world"

In [59]: re.search("(l(.))",str1)
Out[59]: <_sre.SRE_Match at 0x1603580>

In [60]: mat1=re.search("(l(.))",str1)

In [61]: mat1.
mat1.end        mat1.groupdict  mat1.pos        mat1.start
mat1.endpos     mat1.groups     mat1.re         mat1.string
mat1.expand     mat1.lastgroup  mat1.regs       
mat1.group      mat1.lastindex  mat1.span       

In [62]: help(mat1.group)


Help on built-in function group:

group(...)
    group([group1, ...]) -> str or tuple.
    Return subgroup(s) of the match by indices or names.
    For 0 returns the entire match.

In [63]: mat1.group()  #匹配到的全部字符串
Out[63]: 'lo'
    
In [66]: mat1.group(0)  #匹配到的全部字符串
Out[66]: 'lo'

In [67]: mat1.group(1)  #匹配到的第一个分组,不保护分组外的内容(括号外匹配到的内容)
Out[67]: 'lo'

In [68]: mat1.group(2)  #匹配到的第2个分组(第2个括号内的内容)
Out[68]: 'o'

In [69]: mat1.group(3)  #没有第三个
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-69-fe309512a255> in <module>()
----> 1 mat1.group(3)

IndexError: no such group


In [77]: mat1.groups()    #返回以匹配到分组为内容的元祖,不包括分组外的内容(括号外匹配到的内容)
Out[77]: ('lo', 'o')

In [78]: mat1.groups(0)
Out[78]: ('lo', 'o')

In [79]: mat1.groups(1)
Out[79]: ('lo', 'o')

In [80]: mat1.groups(2)
Out[80]: ('lo', 'o')

In [81]: mat1.groups(3)
Out[81]: ('lo', 'o')

In [89]: re.findall("(l(.))",str1)
Out[89]: [('lo', 'o'), ('ld', 'd')]

In [146]: for mat in re.findall("(o(.))",str1):print mat
('o ', ' ')
('or', 'r')

In [148]: for mat in re.finditer("(o(.))",str1):print mat
<_sre.SRE_Match object at 0x1603938>
<_sre.SRE_Match object at 0x16039c0>


In [150]: for mat in re.finditer("(o(.))",str1):print mat.group()
o 
or

In [151]: for mat in re.finditer("(o(.))",str1):print mat.groups()
('o ', ' ')
('or', 'r')





In [114]: str2               
Out[114]: 'hellO wOrld'

In [120]: mat2=re.findall("(l(o))",str2,re.I)    #忽略大小写

In [121]: mat2
Out[121]: [('lO', 'O')]

In [122]: mat2=re.findall("(l(o))",str2,)

In [123]: mat2
Out[123]: []


In [282]: match.start()   #从哪个位置开始匹配到
Out[282]: 0

In [283]: match.end()     #匹配结束的位置
Out[283]: 2

In [299]: match.pos     #从哪个位置开始搜索
Out[299]: 0

In [300]: match.endpos   #搜索的结束位置
Out[300]: 3


In [2]: url="www.magedu.com"

In [3]: re.search("m",url)
Out[3]: <_sre.SRE_Match at 0x14f7098>

In [5]: mat=re.search("m",url)

In [6]: mat
Out[6]: <_sre.SRE_Match at 0x14f7100>

In [7]: mat.
mat.end        mat.group      mat.lastgroup  mat.re         mat.start
mat.endpos     mat.groupdict  mat.lastindex  mat.regs       mat.string
mat.expand     mat.groups     mat.pos        mat.span       

In [8]: mat.group()
Out[8]: 'm'


In [10]: re.findall("m",url)
Out[10]: ['m', 'm']

In [11]: re.finditer("m",url)
Out[11]: <callable-iterator at 0x162f510>

In [12]: mat1=re.fi
re.findall   re.finditer  

In [12]: mat1=re.finditer("m",url)

In [13]: mat1.next()
Out[13]: <_sre.SRE_Match at 0x1626e68>

In [14]: mat1.next()
Out[14]: <_sre.SRE_Match at 0x1626ed0>

In [15]: mat1.next()
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-15-e0f232c7f87c> in <module>()
----> 1 mat1.next()

StopIteration: 


In [19]: re.split(".",url)    #需要转义
Out[19]: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '']

In [20]: re.split("\.",url)
Out[20]: ['www', 'magedu', 'com']

In [30]: f1=open("/tmp/passwd","r+")

In [31]: re.split(":",f1.readline())
Out[31]: ['root', 'x', '0', '0', 'root', '/root', '/bin/bash\n']

re.sub():

In [34]: help(re.sub)


Help on function sub in module re:

sub(pattern, repl, string, count=0, flags=0)
    Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is
    a callable, it's passed the match object and must return
    a replacement string to be used.


In [35]: url
Out[36]: 'www.magedu.com'

In [37]: re.sub("ma","MA",url)
Out[38]: 'www.MAgedu.com'

In [35]: re.sub("m","M",url)
Out[35]: 'www.Magedu.coM'

In [36]: re.sub("m","M",url,1)
Out[36]: 'www.Magedu.com'

In [37]: re.sub("m","M",url,2)
Out[37]: 'www.Magedu.coM'

In [39]: re.subn("m","M",url,3)    #会显示替换了几次
Out[39]: ('www.Magedu.coM', 2)

In [169]: re.sub("M","S",url,count=2,flags=re.I)
Out[169]: 'www.Sagedu.coS'

In [170]: re.sub("M","S",url,count=2)
Out[170]: 'www.magedu.com'

re.match与re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

实例:

#!/usr/bin/pythonimport re

line = "Cats are smarter than dogs";matchObj = re.match( r'dogs', line, re.M|re.I)if matchObj: #加一个r表示是自然字符串不会被转义,例如\n在raw string中,是两个字符,\和n,而不会转意为换行符。由于正则表达式和\会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上r
   print "match --> matchObj.group() : ", matchObj.group()else:
   print "No match!!"matchObj = re.search( r'dogs', line, re.M|re.I)if matchObj:
   print "search --> matchObj.group() : ", matchObj.group()else:
   print "No match!!"

以上实例运行结果如下:

No match!!search --> matchObj.group() :  dogs

检索和替换

Python 的re模块提供了re.sub用于替换字符串中的匹配项。

语法:

re.sub(pattern, repl, string, max=0)

返回的字符串是在字符串中用 RE 最左边不重复的匹配来替换。如果模式没有发现,字符将被没有改变地返回。

可选参数 count 是模式匹配后替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。

实例:

#!/usr/bin/pythonimport re

phone = "2004-959-559 # This is Phone Number"# Delete Python-style commentsnum = re.sub(r'#.*$', "", phone)print "Phone Num : ", num# Remove anything other than digitsnum = re.sub(r'\D', "", phone)    print "Phone Num : ", num

以上实例执行结果如下:

Phone Num :  2004-959-559Phone Num :  2004959559


正则表达式修饰符 - 可选标志

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Python基础】05、Python文

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【Python基础】05、Python文

一、文件系统和文件1、文件系统和文件文件系统是OS用于明确磁盘或分区上的文件的方法和数据结构——即在磁盘上组织文件的方法计算机文件(或称文件、电脑档案、档案),是存储在某种长期储存设备或临时存储设备中的一段数据流,并且归属于计算机文件系统管
2023-01-31

python入门基础教程05 Pytho

Python-Shell反馈常见错误初学者通常会使用Python-Shell来学习Python基础及语法知识,在使用Python-Shell 时会遇到这样或者那样的错误,有的是语法错误,有的是键入的函数或者变量名字拼写错误,现就初学者常出现
2023-01-31

Python基础-Python基础使用

上篇文章 Python基础-初识Python 我们已经知道了什么是Python,Python的用处、和Python的解释器、Python的安装,这篇文章,我们主要讲Python的使用入门本文防盗链:http://python789.blog
2023-01-31

Python基础2-Python中文乱码

转自:https://blog.csdn.net/apache0554/article/details/53889253前言:中文编码问题一直是程序员头疼的问题,而Python2中的字符编码足矣令新手抓狂。本文将尽量用通俗的语言带大家彻底的
2023-01-30

Python基础篇-Python基础语法

为什么学习pythonhttp://www.apelearn.com/bbs/thread-7739-1-1.html Python的安装 getconf LONG_BIT     查看系统版本多少位 rpm -q python uname
2023-01-31

Python基础:文件读写

由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题。举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可能需要10秒,怎么办呢?有两种办
2023-01-31

【Python】05、python程序结

一、程序结构程序结构:语句和表达式按照什么样的顺序执行所有语言无非就三种程序结构:       顺序:默认结构                 语句从上到下依次一行一行的执行,       分支:选择一个分支执行,永远最多只执行一个分支  
2023-01-31

Python基础——1基础

输出print(‘把子肉爱上热干面’,‘哈哈’)  # ‘,’输出为空格输人 name = input(‘提示的内容’)/浮点除法  %.6f//地板除法  整除%  取余python编码问题(采用Unicode编码)ord(‘A’) =
2023-01-30

【python基础】——python 复

复数可以用使用函数 complex(real, imag) 或者是带有后缀j的浮点数来指定。比如:>>> a = complex(2, 4)>>> b = 3 - 5j>>> a(2+4j)>>> b(3-5j)>>>对应的实部、虚部和共轭
2023-01-31

Python基础

主要是复习时总结自己不太熟悉的知识点了(面向Internet的总结)。函数的参数位置参数——按位置依次对应关键字参数——按“键值对”对应func('hello', val = 1)调用时:若有位置参数,位置参数必须在关键字参数的前面,但关键
2023-01-30

python基础-文件操作(10)

一、什么是文件等等这些都叫做文件,各种格式的。但不仅仅限制于这些。 二、文件的作用大家应该听说过一句话:“好记性不如烂笔头”。不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把
2023-01-31

python 基础

#列表是python最常用的数据类型,它可以作为一个方括号内的逗号分隔值出现列表的数据类型不需要相同的类型创建一个列表,只有在方括号([])以逗号(,)分割开即可,不需要相同的数据类型列表表示方式list1=['gao_wang','li_
2023-01-31

Python基础语法(Python基础知识点)

Python与Perl,C和Java语言等有许多相似之处。不过,也有语言之间有一些明确的区别。本章的目的是让你迅速学习Python的语法。 第一个Python程序: 交互模式编程: 调用解释器不经过脚本文件作为参数,显示以下提示:$ pyt
2022-06-04

Python基础:文件的操作

一、python可以在不导入任何模块的情况下对文件完成读、写、追加,替换(稍复杂)。二、打开文件:        1、f = open('text.txt')            这种方式打开,操作完后需要使用f.colse()关闭。  
2023-01-31

Python基础--Python3基础语

Python3 基础语法编码默认情况下,Python3源码文件以UTF-8编码,所有字符串都是Unicode字符串。当然也可以为源码文件指定不同的编码,例如:# -*- coding: cp-1252 -*-标识符1.第一个字符必须是字母表
2023-01-31

python文件基础之(文件操作)

在之前学习了python的列表、元组、集合等知识,接下来将python的文件相关的知识做一总结和分析。一 open函数 在我们用word、excel、vim对文件操作时,肯定要先打开文件,同样在编程里面也是需要将文件打开,然后再对文件操作,
2023-01-31

【Python】04、python基础数

1、常量和变量2、基本数据类型3、运算符一、常量与变量1、常量常量:其值不变的量          一旦赋值,其值就不可再改变;          就是说不能再重新赋值,很像shell中的只读变量,python中不存在常量字面常量:一个单独
2023-01-31

【Python基础 09】Python高

目标列表元组字典字符串公共方法变量高级知识点回顾Python 中数据类型可以分为 数字型 和 非数字型数字型整型 (int)浮点型(float)布尔型(bool) 真 True 非 0 数 —— 非零即真假 False 0复数型 (comp
2023-01-31

【Python基础】06、Python函

一、函数概述1、函数的基础概念       函数是python为了代码最大程度地重用和最小化代码冗余而提供的基础程序结构。       函数是一种设计工具,它能让程序员将复杂的系统分解为可管理的部件       函数用于将相关功能打包并参数
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录