在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中。

今天我们就简单讲一下Python下如何创建文件、文件夹,今后就可以用上了。

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

绝对路径比较好理解,就是最完整的路径,包含盘符的,比如D:\user\abc.txt,表示的就是D盘目录下,user文件夹中的abc.txt文件。当然在代码中,\是特殊字符,我们需要两个\来表示该路径,open('D:\user\abc.txt')。

相对路径,指的是相对当前路径来说的,假如当前路径为D:\user\public。

当前路径下的文件可以直接输入文件名来访问,比如open(abc.txt),表示打开绝对路径为D:\user\public\abc.txt的文件。

当前路径下的文件夹中的文件,可以这样来访问,比如open('/test/abc.txt'),表示打开绝对路径为D:\user\public\test\abc.txt的文件。

如何获取当前路径呢?

导入os模块,os的getcwd()方法会返回代码所在的当前目录。

这里返回的是绝对路径。

import os

cwpath=os.getcwd()
print(cwpath)

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

那么,如果我们想指定一个路径,用于创建文件夹,应该如何实现的?

首先,我们要判断文件夹是否存在;

接下来,我们可以创建单层目录或者多层目录。

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

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

创建单层目录的方法,os.mkdir(path)。

创建多层目录的方法,os.makedirs(path)。

这两个函数的不同在于,如果path包含多层目录,mkdirs将会创建父目录,而mkdir会报错,提示找不到父目录。

所以一般我们都只用makedirs,即使创建单层目录。当然,也看你的喜好了。

举个栗子:

import os

path=r'D:\Python Mat\codes\Data Learning\1\Python练习'
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,',保存完成')

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

【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化的更多相关文章

  1. python基础——元组、文件及其它

    Python核心数据类型--元组 元组对象(tuple)是序列,它具有不可改变性,和字符串类似.从语法上讲,它们便在圆括号中,它们支持任意类型.任意嵌套及常见的序列操作. 任意对象的有序集合:与字符串 ...

  2. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  3. 2015/9/9 Python基础(10):文件和输入输出

    文件对象文件对象不仅可以用来访问普通的磁盘文件,而且也可以访问其它任何类型抽象层面上的“文件”.一旦设置了合适的“钩子”,你就可以访问文件类型接口的其它对象,就好像访问的是普通文件一样.文件对象的处理 ...

  4. python基础学习笔记——文件操作

    文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...

  5. python基础知识六 文件的基本操作+菜中菜

    基础知识六 文件操作 ​ open():打开 ​ file:文件的位置(路径) ​ mode:操作文件模式 ​ encoding:文件编码方式 ​ f :文件句柄 f = open("1.t ...

  6. python基础3之文件操作、字符编码解码、函数介绍

    内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...

  7. Python基础-week03 集合 , 文件操作 和 函数详解

    一.集合及其运算 1.集合的概念 集合是一个无序的,不重复的数据组合,它的主要作用如下 *去重,把一个列表变成集合,就自动去重了 *关系测试,测试两组数据之前的交集.并集.差集.子集.父级.对称差集, ...

  8. Python基础:25文件

    一:文件对象 文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接 ...

  9. python基础学习之文件操作&函数

    1.文件处理相关 1.编码问题 ①python2与python3中的默认编码: py2默认使用ASCII码,py3默认使用utf-8 ②为什么会出现中文乱码,中文乱码的情况有哪些? #sys.stdo ...

随机推荐

  1. 怎样优化cocos2d/x程序的内存使用和程序大小

    再次感谢原创者:Steffen Itterheim.原创博客原文地址: http://www.learn-cocos2d.com/2012/11/optimize-memory-usage-bundl ...

  2. Windows如何自定义U盘盘符、文件夹图标、文件夹背景

    自定义U盘盘符.文件夹图标.文件夹背景 注意对于Vista和Win7的用户不支持文件夹图标和文件夹背景的更换 1.自定义盘符:在U盘根目录下新建文件 autorun.inf(可先建.txt文本文档,再 ...

  3. 使用node.js 文档里的方法写一个web服务器

    刚刚看了node.js文档里的一个小例子,就是用 node.js 写一个web服务器的小例子 上代码 (*^▽^*) //helloworld.js// 使用node.js写一个服务器 const h ...

  4. 2d 点云匹配算法

    #include "dbtype.h" #include "dbkdtree.h" #include <pcl/point_cloud.h> #in ...

  5. webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc ((); 或者 Unexpected token: operator (>)

    webpack 打包压缩 ES6文件报错UglifyJs + Unexpected token punc (();  或者 Unexpected token: operator (>) 解决方案 ...

  6. Delphi7 Just In Time debugger 与VS冲突

    这是设定系统当前调试器的,你可以在注册表中自己设置一下,位置是:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDe ...

  7. Eclipse没有 web Project 选项的解决办法

    装下插件即可.步骤如下: 选择 Help >Software Updates >Find and Install.这个选项会让您可以下载和安装 Web 工具,且无需转到 Web 站点. 选 ...

  8. DataUml Design 介绍8-DataUML 1.2版本正式发布(支持SQLite数据库、NetUML开发框架)

    DataUML 1.2版本在软件架构上有了很大的变化,目前DataUML支持Access.SQLite.MY SQL .ORACLE.MS SERVER2000.MS SERVER2005.MS SE ...

  9. 我的 Android 开发实战经验总结

    我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...

  10. OpenFiler configuration

    5.OpenFiler configuration   登录Openfiler   步骤1:安装 FireFox   步骤2:通过FireFox以HTTPS://server-ip:446 远程访问O ...