2018-1-25-浅谈Pyhton下的转义字符

2018-01-27  本文已影响0人  0xC00005

前言

前几天写了一个爬P站的分布式爬虫,然后一如既往的把电脑扔在那里不管.....然后上课回来就杯具了,因为我原来默认的文件地址是爬到我在C:\的用户桌面里面方便管理,然后在爬取了1000+的高分辨壁纸之后,发现C盘满了?

那你很棒棒哟 щ(`ω´щ) (我竟然一直把爬虫放在系统盘??)

然后翻山越岭找设置文件准备重新设置下载路径【对,爬虫不是我写的】

正文

文件路径的表达

由于很久很久没有写了,于是一打开就急忙在D:\新建了一个放老婆们的文件夹,准备迁移老婆

```py 

 #下载网页文件到本地文件夹  
import os,urllib2,urllib  
            
#设置下载后存放的存储路径'D:\python\picture\benzi'    
path='D:\python\picture\benzi'
file_name='000XXX.avi'   #文件名,包含奇怪的文件格式  
dest_dir=os.path.join(path,file_name)  

```

然后就炸了

```py 

IOError: [Errno 22] invalid mode ('w') or filename: '000XXX.avi'

```

大快人心~

赶紧检查文件路径,发现并没有什么问题...
.
以我多年学习C++写friopen的经验,一定是系统PATH设置有问题!

转义!

使用高级的搜索算法BDFS(英语:Baidu-First-Search,简称BDFS)之后,发现小白病犯得不轻,只需要转义在文件路径前加上r或者用双反(‘\\’)代替反斜杠(‘\’),即可化腐朽为神奇,重现青春活力【逃】

这还要从字符串的原理说起

真正的原理是python会把文件路径中的‘\’认为是一个含有特殊意义的字符(比如占位符,换行符等等),而字符串返回的值,会让python从原本的字面意义上去理解这行文件路径【噗嗤】

不仅仅是python,就连你在这篇文章里面看到的所有双反,其实都是三个斜杠('\\'),而这里的三个斜杠其实在源代码里面又是五个斜杠


怎么样晕没有?

没有就接着听qwq

在大多数高级语言中(如py,md等等)斜杠都不会以ASCII的字符显示出来,而是作为有特殊含义的转义字符

那么问题来了,如果我想print('/n')

这时候就需要有像'''之类的东西来划定不需要被转义的范围,在python和markdown中通常是两个反斜杠(\这里的内容不会被转义,而是字面意思\)

那为什么要加r呢?

r后面带的这样的一个字符串 它里面所有的字符在解释的时候 直接都按字面来解释 这个后面是不是正好都是我们要的

这样的一个路径加文件名 使用的是原始字符串 在很多时候的话可以避免出错

而如果不加这个r的话怎么办呢 其实要用到这样的形式 要用两个反斜杠 这是我们后面要讲的转义字符 也就是说在一个字符串里面的话 如果你要表示一个反斜杠 需要用两个反斜杠来表示 这部分内容我们后面会专门讲到 所以在类似于这样的情况下面 我们用r这样的原始字符串操作符 往往会比较地方便 【是吗老贼?】

那到底被转义成了什么呢?

答:Unicode字符串【只需要知道这个编码一直跟ASCII有仇就明白了】

拓展阅读Unicode维基百科

结语

罗里吧嗦有点多了,附上资料参考

南京大学python数据与收集

利用Python中的urllib模块下载文件到本地文件夹

文本文件的输入与输出

还有我几百万年前看别人用python写的网页文件下载器

今天就拉出来造福一下人类吧......【码风不力,码风不力啊~】

```py 

# -* - coding: UTF-8 -* -  
#!/usr/bin/python  
#下载网页所有图片到本地文件夹  
import os,urllib2,urllib  
            
import re,urllib2  
  
def getPage(url):  
    '''''下载文件html代码,找出一楼的核心代码'''  
    opener = urllib2.build_opener()  
    #不加头信息则出现403错误和乱码  
    opener.addheaders = [('User-agent', 'Mozilla/5.0')];  
    htmlAll = opener.open( url ).read()  
    reg1Floor = '<div class="msgfont">(.*?)</div>'  
    html = re.search(reg1Floor,htmlAll)  
    html = html.group()  
    #文件保存编码和文件编辑编码都是utf-8,所以decode一次,不然会出现乱码,但是不影响结果。  
    return html.decode('utf-8')  
  
def getImg(url):  
    '''''从核心代码中照图图片地址,并且下载保存、命名'''  
    pageHtml = getPage(url)  
    #找到所有图片地址  
    regImg = '<img src="(.*?)"  alt="" />'  
    imglist = re.findall(regImg,pageHtml)  
    dir = r'E:\img'  
    #print imglist  
    for index in xrange(0,len(imglist)):  
        picname = str(index+1) + '.jpg'  
        finename = os.path.join(dir,picname)  
        urllib.urlretrieve(imglist[index], finename)  
        print finename + ' ok!'  
      
  
if __name__ == '__main__':  
    getImg('http://topic.csdn.net/u/20101013/11/024465A6-8E16-444C-9A09-DD374D29044C.html')  
    
```

最后的最后

来Max的Blog点星星吧~

上一篇 下一篇

猜你喜欢

热点阅读