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

时间:2022-09-30 18:18:00

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

今天我们就简单讲一下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基础之文件、文件夹的创建,对上一期代码进行优化

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

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

  1. python基础&mdash&semi;&mdash&semi;元组、文件及其它

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

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

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

  3. 2015&sol;9&sol;9 Python基础&lpar;10&rpar;:文件和输入输出

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

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

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

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

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

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

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

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

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

  8. Python基础:25文件

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

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

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

随机推荐

  1. PHP之使用网络函数和协议函数

    使用其他Web站点的数据 <html> <head> <title> Stock Quote From NASDAQ </title> </hea ...

  2. Python标准模块--collections

    1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选择: namedtuple,可以创建包含名称的tuple ...

  3. jQuery学习易忘细节

    1.类似于alert(""),但不会中断页面操作:console.log("last"); 2.javascript是HTML5以及所有现代浏览器中的默认脚本语 ...

  4. nodejs js模块加载

    本文地址:http://www.cnblogs.com/jasonxuli/p/4381747.html nodejs的非核心模块(core module)加载主要使用的就是module.js. 项目 ...

  5. &lpar;转载&rpar;OSI七层参考模型和TCP&sol;IP四层参考模型

    Mallory   网络模型概念浅析 网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型. #只是一种设计==模型# Open System Interconnect的缩写,意为开放式系统互 ...

  6. AtCoder Beginner Contest 122 解题报告

    手速选手成功混进rated only里面的前30名,但是总排名就到110+了... A - Double Helix #include <bits/stdc++.h> #define ll ...

  7. Latex所有常用数学符号整理

    原文地址:https://blog.csdn.net/ying_xu/article/details/51240291 这段时间用Latex很多,常常需要查阅相关特殊的符号,这里做一个整理,也方便大家 ...

  8. vb&period;net播放资源文件中的音乐

    1.在自己的工程里添加一个资源文件. 2.打开添加的资源文件,资源类型选择为音频,点击添加资源把准备好的wav格式音乐文件添加进入资源文件. 3.设置资源属性和文件属性为嵌入 4.代码以及调用方法 P ...

  9. PE、ELF结构图

    PE:https://bbs.pediy.com/thread-203563.htm ELF:https://blog.csdn.net/jiangwei0910410003/article/deta ...

  10. 大量界面刷新时手动Dispose也是有必要的

    在winform窗体上拖一个flowLayoutPane,一个Button,项目中再创建一个用户控件UcControl,用户控件上放几十个子控件 private void button1_Click( ...