zoukankan      html  css  js  c++  java
  • 【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化

    在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中。
    今天我们就简单讲一下Python下如何创建文件、文件夹,今后就可以用上了。

    1、搞清楚相对路径和绝对路径

    绝对路径比较好理解,就是最完整的路径,包含盘符的,比如D:userabc.txt,表示的就是D盘目录下,user文件夹中的abc.txt文件。当然在代码中,是特殊字符,我们需要两个来表示该路径,open('D:userabc.txt')。
    相对路径,指的是相对当前路径来说的,假如当前路径为D:userpublic。
    当前路径下的文件可以直接输入文件名来访问,比如open(abc.txt),表示打开绝对路径为D:userpublicabc.txt的文件。
    当前路径下的文件夹中的文件,可以这样来访问,比如open('/test/abc.txt'),表示打开绝对路径为D:userpublic estabc.txt的文件。

    如何获取当前路径呢?
    导入os模块,os的getcwd()方法会返回代码所在的当前目录。
    这里返回的是绝对路径。

    import os
    
    cwpath=os.getcwd()
    print(cwpath)
    

    2、如何创建一个绝对路径文件夹

    那么,如果我们想指定一个路径,用于创建文件夹,应该如何实现的?
    首先,我们要判断文件夹是否存在;
    接下来,我们可以创建单层目录或者多层目录。

    判断目录是否存在的方法主要利用os.path.exists(path)来判断,返回一个bool值,举个例子:

    import os
    #当前代码所在的目录,肯定存在啊。
    path=r'D:Python MatcodesData LearningPython基础代码'
    print(os.path.exists(path))#返回了True
    

    创建单层目录的方法,os.mkdir(path)。
    创建多层目录的方法,os.makedirs(path)。
    这两个函数的不同在于,如果path包含多层目录,mkdirs将会创建父目录,而mkdir会报错,提示找不到父目录。
    所以一般我们都只用makedirs,即使创建单层目录。当然,也看你的喜好了。
    举个栗子:

    import os
    
    path=r'D:Python MatcodesData Learning1Python练习'
    os.makedirs(path)
    

    3、如何创建一个相对路径文件夹

    这里先将一个路径分隔符的概念。
    由于在Windows和Linux、Mac下路径分隔用的不同的符号,windows下用,linux用/。所以为了写的代码能在多系统上使用,我们尽量不要直接指定或者/来链接路径。
    python中os.path常用模块

    os.path.sep:#路径分隔符
    os.path.altsep: #根目录
    os.path.curdir:#当前目录,其实就是一个.。
    os.path.pardir:#父目录,其实是两个.。
    os.path.abspath(path):#绝对路径
    os.path.join(): #常用来链接路径,这个才是最重要的方法。
    os.path.split(path): #把path分为目录和文件两个部分,以列表返回
    

    假如我们要在当前目录下创建一个文件夹,名字随便起吧,比如是'name'。

    import os
    
    curPath=os.getcwd()
    tempPath='name'
    targetPath=curPath+os.path.sep+tempPath
    #print(targetPath)
    if not os.path.exists(targetPath):
        os.makedirs(targetPath)
    else:
        print('路径已经存在!')
    

    4、如何在指定文件夹中创建文件

    好了,既然现在我们能够创建各种文件夹了,那么如何在指定的文件夹中创建文件呢,比如在name文件夹中创建一个名为abc.txt的文件。

    import os
    
    curPath=os.getcwd()
    tempPath='name'
    targetPath=curPath+os.path.sep+tempPath
    #print(targetPath)
    if not os.path.exists(targetPath):
        os.makedirs(targetPath)
    else:
        print('路径已经存在!')
    fileName='abc.txt'
    filePath=targetPath+os.path.sep+fileName
    with open(filePath,'w') as f:
        f.write('Hello world!')
        print('写入成功!')
    

    在上面的代码中,我们首先创建了name文件夹,如果文件夹存在的话,就输出已存在的信息。
    然后,构造文件名称为abc.txt,其实open方法的对象,就是文件路径+文件名,我们这使用了os.path.sep来链接两者,以免在不同系统上出错。

    5、对妹子图的代码进行优化

    好了,今天到这里,我们已经学会了创建文件夹、保存文件等操作。
    接下来我们对昨天的代码进行一下修改。

    #保存某一张图片
    def save_one_pic(pic_parent):
        pic_Model=pic_parent.split(r'/')[-2]
        headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
        html=requests.get(pic_parent,headers=headers).text
        pattern=re.compile(r'<img src="(h.*?)" alt')
        pic_url=re.findall(pattern,html)[0]
        headers['Referer'] = pic_parent  # 新增属性,否则得不到图片
        pic = requests.get(pic_url, headers=headers).content
        #这里,我们对单张图片的path进行了构造!!!!!!
        pic_name =pic_url.split(r'/')[-1]
        picPath=os.getcwd()+os.path.sep+pic_Model+os.path.sep+pic_name
        
        with open(picPath, 'wb') as f:
            f.write(pic)
            print('------保存成功:',pic_name)
    #保存某个模特的所有图片
    def get_one_volume_pic(pic_volume_url):
        headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'}
        html = requests.get(pic_volume_url, headers=headers).text
        pattern=re.compile(r"(.*)<span>(d+?)</span></a><a href='(.*?)'><span>下一页")
        max_no=int(re.findall(pattern,html)[0][-2])
        first_name=pic_volume_url.split('/')[-1]
        #print(first_name)
        #print(max_no)
        print('--开始保存:',first_name)
        #在这里,我们创建了该模特的专属文件夹!!!!!!
        curPath=os.getcwd()
        targetPath=os.getcwd()+os.path.sep+first_name
        if not os.path.exists(targetPath):
            os.makedirs(targetPath)
            print('---文件夹已创建!')
            
        p=Pool()
        p.map(save_one_pic,[pic_volume_url+'/'+str(i) for i in range(1,max_no+1)])
        # for i in range(max_no+1):
        #     url=pic_volume_url+str(i)
        #     save_one_pic(url)
        print('--',first_name,',保存完成')
    

    【插入图片,文件夹视图】

  • 相关阅读:
    一个主机下创建两个MySQL
    Chrome: Failed to read the 'localStorage' property from 'Window' 的解决办法
    Effective C++
    归并排序
    Daily Note
    关于Beta分布、二项分布与Dirichlet分布、多项分布的关系
    测试公式
    VLAN原理解释
    子网划分
    windows下制作debian U盘启动
  • 原文地址:https://www.cnblogs.com/xingzhui/p/7906114.html
Copyright © 2011-2022 走看看