12. 数据放在本地,心里才更踏实,滚雪球学 Python

梦想橡皮擦 等级 455 0 0

今天是持续写作的第 12 / 100 天。 如果你有想要交流的想法、技术,欢迎在评论区留言。

本篇文章要讲解的内容是 Python 文件操作的相关内容,滚雪球学 Python 第一遍已经进行到中途,是否还能坚持住呢?加油。

十二、Python 文件读取与写入

电脑文件的操作是任何一门编程语言都会涉及的知识,本篇博客主要围绕 Windows 电脑上的文件操作进行说明,毕竟看到本博客内容的同学大多数都是使用的 Windows 电脑。

12.1 文件夹和文件路径

文件和文件夹就不用说了吧,你想要学习编程肯定离不开电脑,对电脑文件和文件夹已经比较熟悉了,但是文件路径可能就不太清楚了,本文开篇先介绍一下文件路径相关问题。

12. 数据放在本地,心里才更踏实,滚雪球学 Python 打开你的电脑上任一文件夹,在上图所示位置发现的一个地址就是文件路径,对于电脑上任一文件都可以用文件路径+文件名访问到。

C:\Users\Administrator\Desktop\书籍封面\abc.png

除了最后的是文件名以外,前面的就是文件路径。 例如对于 abc.png 文件,它的文件路径是 C:\Users\Administrator\Desktop\书籍封面。文件路径可称作文件目录或者文件所在文件夹

12.1.1 绝对路径和相对路径

标题的这两个概念很有意思,在第一次学习的时候很容易就弄迷糊了。 先记住绝对路径吧,绝对就是绝对不变的意思。

例如上述文件 abc.png 它的绝对路径就是硬盘上的一个不会变的地址,即 C:\Users\Administrator\Desktop\书籍封面 就是它的绝对路径。

一般情况下理解为绝对路径是从根目录开始描述的路径。

相对路径,关键词是相对,相对就是相对与当前目录,这个需要结合案例进行学习,稍后补充。

还有两个知识点需要补充一下。. 没错,就是一个点,表示的是当前文件夹;.. 两个点表示的是上一层文件夹。

12.1.2 os 模块与 os.path 模块

在 Python 中操作文件路径,使用 os 模块,os.path 模块是 os 模块内部的一个子模块,首先导入该模块。

import os

获取当前 Python 文件的目录

getcwd 方法可以获取当前 Python 文件所在的工作目录,就是当前文件在那个文件夹中,获取到的是绝对地址,例如下述代码。

import os
print(os.getcwd())

*获取绝对路径 os.path.abspath *

os.path 模块中的 abspath 方法可以返回绝对路径,可以先通过 help 函数,查看该方法使用方式。

import os

help(os.path.abspath)

注意学习返回结果,学编程对英语要求不高,但是常见的单词还是要认识一些的。

Help on function abspath in module ntpath:

abspath(path)
    Return the absolute version of a path.

abspath 方法需要一个参数 path,即一个路径,基于该路径在返回绝对路径。

例如通过该代码返回 demo4.py 文件的绝对路径

import os

ret = os.path.abspath("demo4.py")
print(ret)

*获取相对路径 os.path.relpath * 绝对路径返回的是一个从根目录开始的路径值,但是相对路径不一样,该方法既然叫做相对,那需要有一个相对对象,所以该方法的语法格式如下:

os.path.relpath(path,start)
  • path 就是要获取绝对路径的地址值,描述起来比较绕,一会看代码;
  • start 相对的对象值。
import os

ret = os.path.relpath("D:\\")
print(ret)

获取 D:\\ 该目录的相对地址,相对于谁的地址,没写 start 参数就相对于当前工作目录,即 Python 文件所在的目录,你已经知道当前 Python 文件所在的目录是 D:/gun/2

先认为的推断一下 D:\\ 相对于 D:/gun/2 怎么获取,应该是父级目录的父级目录,那用代码怎么表示,已经学习了父级(上一层文件夹)目录表示方式 ..,所以写作 ..\.. ,整理完逻辑之后,发现跟代码得到的效果一致。

..\..

path 参数修改为跟 Python 文件目录一致的值,看一下是不是得到相对路径是一个 .,表示当前目录。

import os

ret = os.path.relpath("d:\\gun\\2")
# 或者写成下面这个样子
# ret = os.path.relpath("d:/gun/2")
print(ret)

结果输出为 . ,没错是期望值。

学起来如果吃力,不要急,接着往下看,慢慢你就悟了。

12.1.3 路径检查方法

检查路径主要是为了检查文件或者文件夹是否存在,或者判断一个路径对应的是一个文件夹还是一个文件。

  • exists(path) 如果 path 文件或文件夹存在返回 True,否则返回 False;
  • isabs(path) path 是绝对路径返回 True,否则返回 False;
  • isdir(path) path 是文件夹返回 True,否则你懂;
  • isfile(path) path 是文件返回 True。

以上四个方法都在 os.path 模块下,具体代码比较简单,自己尝试一下即可。

12.1.4 目录操作

以下几个方法在 os 模块中,执行如下操作建议先通过 os.path.exists 判断目录是否存在。

  • mkdir(path) 创建目录;
  • rmdir(path) 删除目录;
  • chdir(path) 切换当前工作目录到 path;
  • remove(path) 删除文件,注意如果 path 是一个目录,删除会报错,权限不足,删除目录请使用 rmdir

以上四个方法实际编码也非常简单,导入模块之后,用就完了,橡皮擦自己就先不浪费篇幅了。

12.1.5 获取文件大小

该内容只需要调用 getsize 方法即可。

import os
print(os.path.getsize("demo4.py"))

注意得到的是字节大小。

12.1.6 获取指定目录下面的所有内容

通过 os.listdir 方法可以获取指定目录下的所有内容,包括文件与文件夹。

import os
print(os.listdir("."))

输出的内容:

['demo1.py', 'demo2.py', 'demo3.py', 'demo4.py', 'demo5.py', 'dog_module.py', '__pycache__']

可以与文件进行一下比对。 12. 数据放在本地,心里才更踏实,滚雪球学 Python

12.1.7 os.walk 方法

这个方法比较不好理解,第一次滚雪球阶段还是暂时略过,该方法可以遍历目录树,通过循环就可以获取到指定目录下面所有的文件与文件夹了,但是咱不学 (^_−)☆

12.2 Python 读写文件

12.2.1 读取文件

Python 在读写文件的时候首先要做的是打开文件,然后可以一次性读取文件或者一行行的读取,打开文件使用 open 函数。

读取文件所有内容

使用 open 函数打开文件之后,可以通过 read 读取文件内容,该方法相当于将文件的内容一次性的读取到了程序的一个字符串中,非常强大。

test.txt 文件内容

梦想橡皮擦
是一个大佬
真的是一个大佬
我自己都信了

读取代码如下:

# 文件地址,注意提前在当前目录新建一个 test.txt 文件
file = "test.txt"
# 打开文件
f = open(file, encoding="utf-8")
# 读取文件全部内容
read_str = f.read()
# 关闭文件
f.close()
print(read_str)

第一点需要注意的是使用 open 打开文件时,必须在文件使用完毕之后通过 close 关闭文件。 第二点需要注意,上述代码中 file = "test.txt" 该文件名并不是一个完整的路径,这种情况下表示该文件和当前的 Python 文件在一个目录,如果在不同目录,需要用到前文讲到的路径相关知识了。

例如,在上一级目录 ../test.txt

上述代码如果运行出现编码 BUG,注意修改以下 open 函数部分代码,通过 encoding = "utf-8" 设置文件打开时的编码。

# 打开文件
f = open(file, encoding="utf-8")

逐行读取文件内容

通过循环调用文件对象,可以逐行输出文件内容。

# 文件名
file = "test.txt"
# 打开文件
f = open(file, encoding="utf-8")
# 循环逐行读取
for line in f:
    print(line)
# 关闭文件
f.close()

输出的内容如下图所示。 12. 数据放在本地,心里才更踏实,滚雪球学 Python 在这里逐行读取多了一个换行,原因是在 txt 文件中,每行的末尾默认有一个换行,print 函数输出也会带一个换行,所以出现 2 个回车符,解决办法,可以使用 print 函数的第二个参数。

# 文件名
file = "test.txt"
# 打开文件
f = open(file, encoding="utf-8")
# 循环逐行读取
for line in f:
    print(line,end="")
# 关闭文件
f.close()

逐行读取方法 readlines

使用 readlines 方法可以将数据一次性读取到一个列表中,例如下述代码。

# 文件名
file = "test.txt"
# 打开文件
f = open(file, encoding="utf-8")
# 逐行读取
data = f.readlines()
# 关闭文件
f.close()

print(data)

输出内容中,可以看到每行读取到的字符串都带一个 \n 换行符。

['梦想橡皮擦\n', '是一个大佬\n', '真的是一个大佬\n', '我自己都信了']

with 上下文

在 Python 中为了防止忘记打开文件之后,在进行关闭,提供了一个 with 关键词解决该问题,语法格式如下:

with open(待打开文件) as 文件对象:
    文件操作代码块

有了该语法之后,前文的代码可以修改为:

file = "test.txt"
# 打开文件
with open(file,encoding="utf-8") as f:
    # 读取文件全部内容
    read_str = f.read()
    print(read_str)

读取文件还包含其它的几个方法,可以自行尝试。

12.2.2 写入文件

写入文件,泛指写入到本地硬盘上。

在学习写入文件之前,需要先扩展一下 open 函数,该函数目前已经掌握 2 个参数,第一个是操作的文件,第二个是文件的编码 encoding,在补充一个文件打开模式 mode 参数,open 函数中该参数的默认值是 r ,代码写作 open("text.txt",mode="r",encoding="utf-8") 表示以只读的方式打开文件,如果想要向文件中写入内容,需要将 mode 参数设置为 w。关于 mode 参数还有其它值,不要着急,后续会学习到,先记住 2 个即可。

文件写内容的语法格式为:

文件对象.write(待写入内容)

具体案例代码:

# 文件地址,注意提前在当前目录新建一个 test.txt 文件
file = "test.txt"
# 打开文件
with open(file, mode="w", encoding="utf-8") as f:
    # 写入文件内容
    f.write("我是即将被写入的内容")

注意,待写入的内容需为字符串类型,其它类型写入会报错。该种方式写入内容之后,原内容会被覆盖,如果想要在文件中追加数据,用到的是 mode = a

写入多行数据 通过 write 方法可以写入单行数据,如果想要写入多行数据,可以在 with 代码块中,写上多个 write 方法即可。注意 write 方法默认在行尾不添加换行符,如果希望加上换行符,需手动添加。

例如下述代码:

file = "test.txt"
# 打开文件
with open(file, mode="w", encoding="utf-8") as f:
    # 写入文件内容
    f.write("我是即将被写入的内容\n")
    f.write("我是即将被写入的内容")

12.3 shutil 模块

shutil 模块可以在 Python 代码中快速的操作文件,导入该模块使用 import shutil 即可。

12.3.1 文件复制

使用该模块中 shutil 对象的 copy 方法可以对文件进行复制操作。

shutil.copy(旧文件,新文件)

书写成真实代码如下:

import shutil

shutil.copy("test.txt","aaa.txt")
shutil.copy("test.txt","../aaa.txt") # 不同目录拷贝

12.3.2 目录复制

copytree 方法语法格式与 copy 一致,只不过该方法是用来复制目录的,如果目录下面有子目录或文件一起复制。

import shutil
# 第一个参数是旧目录,第二个参数是新目录
shutil.copytree("../1","a4")

执行代码时,需要确定新目录不存在,如果存在会报错。

12.3.3 多用的 move 方法

使用 move 方法可以移动文件。

shutil.move(旧文件,新文件)

移动文件一定要确保旧文件存在,移动之后旧文件将移动到新文件位置。

使用 move 方法可以修改文件名,在移动文件的过程中,如果新旧文件名称不一致,可实现移动文件并重命名的效果。

使用 move 方法还可以移动目录,移动目录时会将该目录下的所有文件一起移动。当然如果新旧目录名称不一致,还可以实现移动目录并重命名的效果。

12.3.4 删除有数据的目录

使用 rmtree 可以删除有数据的目录,相当于直接清空该目录下的所有目录和文件,再顺便把该目录也删除了。具体内容自行测试即可。

12.4 补充知识

12.4.1 zipFile 模块

通过该模块可以直接对文件进行压缩与解压操作。后续滚雪球中将补充该部分知识。

12.4.2 认识编码

在本篇博客中主要涉及编码的地方就是 open 函数中的 encoding 参数,我们将该参数的值设置为了 utf-8,在很多程序中设置为该值可以解决很多潜在的编码 BUG。

本部分内容展开讲解会占用很大篇幅,这里只说明以下几点知识。

  1. UTF-8 这几个字母的写法你要记住,大小写都可以;
  2. UTF-8 中有个 BOM 文件头,这里不细说,如果发现 UTF-8 解决不了编码问题,那就设置为 utf-8-sig 尝试解决。

12.5 这篇博客的总结

Python 文件操作其实核心还是对模块的应用,熟练的使用 Python 给我们内置好的模块能极大的提高编写代码的效率,更好的完成业务上的逻辑。

🈚🈚🈚🈚🈚


收藏
评论区

相关推荐

1. 这才是 Python 学习的正确起手姿势,滚雪球学 Python
在博客上,我写了很多关于 Python 的文章,很多朋友可能觉得橡皮擦应该是一个 Python 开发人员或者一个技术开发人员,但很遗憾的告诉大家,橡皮擦恰好是很多公司中开发人员的对立面【产品经理】。但我是一个相当懂技术人的产品经理。 一、Python 初次接触,Python 变量与基本运算 1.1 滚雪球学 Python 课程前置导语 从本篇博
12. 数据放在本地,心里才更踏实,滚雪球学 Python
今天是持续写作的第 <font color"red"12</font / 100 天。 如果你有想要交流的想法、技术,欢迎在评论区留言。 本篇文章要讲解的内容是 Python 文件操作的相关内容,滚雪球学 Python 第一遍已经进行到中途,是否还能坚持住呢?加油。 十二、Python 文件读取与写入 电脑文件的操作是任何一门编程语言都会涉
15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工
本篇文章将给大家介绍 Python 多线程与多进程相关知识,学习完该知识点之后,你的 Python 程序将进入另一个高峰。 <center<font colorred缓解一下视疲劳</font</center 15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工(https://imghelloworld.oss
原来Python绘图也可以这么漂亮,这次真的是学习到了!
(https://imghelloworld.osscnbeijing.aliyuncs.com/8830803f033eeed85783e9058cf08968.png) 作者:朱小五 来源:快学Python 👆人生苦短,快学Python! 最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介
零基础成功转行python工程师,从月薪4K到现在月入过W!
本人文科生,回顾自己Python的学习经历,有一些学习心得和避坑经验分享给大家,让大家在学习 Python 的过程中少走一些弯路!减少遇到不必要的学习困难!我学习python的目的挺俗的,就是为了更高的职位和薪水,当时因为计算机基础不是很好,可以说特别的困难了,看了一些网上的教程学习,可以说是拆东墙补西墙的做法,差点就...而且总是记不住一些基础语法,刚开始
为啥要学Python?
为啥要学Python?如果我跟你说你现在用一天拉出来的财务统计表,学了Python之后能用1个小时就搞定,你学不学?如果你花了8个小时扒的竞品投放数据,学了Python之后能用30min搞定,你学不学?你总羡慕你的同事能6点下班,陪女朋友蹦迪夜生活丰富,你却在满脸油头的爆肝加班,学了Python之后,你也能这样,你学不学?如果我跟你说,学会了Python能增
Python初学者必备书籍《Python入门经典》高清PDF版|百度网盘免费下载|Python初学者,自学Python必读
提取码:1028以及前文提到的学习路线图内容简介Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python可以用于很多的领域,从科学计算到游戏开发。《Python入门经典》是面向Python初学者的学习指南,详细介绍了Python编程基础,以及一些高级概念,如面向对象编程。全书分为24章。第1章介绍了Python的背景和安装方法。第2章
最好用的Python学习教程第一篇章
学习不打烊,充电加油只为遇到更好的自己。希望大家如果觉得好的话可以点赞,评论鼓励一下。 一、从这里学起?学Python你应该知道这些内容。 1.1 导语如何快速学会Python?这篇博客会告诉你如何从无到有,构建自己的知识框架,博客主励志打造最好用的Python基础教程。 1.2 为什么要学习Python 简单易学Python是一种代表简单主义思想的语言,
零基础应该如何开始学习python
随着人工智能时代的到来,Python也在不断发展壮大,越来越多的人选择学Python,只要因为它容易学习,功能又强大还可以跨平台。其实Python作为一门脚本语言,难度上相较于其他语言略微简单点,但是对于没有计算机基础的人来说,也是非常难得,可能安装这一步就会难倒大家!1、Python学习确定方向对于刚入门的人来说,要先把Python基础和进阶学透,再继续往
关于学习python的一点意见分享
Python适合初学者入门。Python作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。相比其他主流语言,有更好的可读性,上手相对容易。各种模块,免去了很多重复的工作,更快地写出东西。配置环境也不复杂,mac和linux内置了Python。自学python,最大的3个经验:.一本易懂,比较好的教程,从头到尾
学python?我入门才七天
怎么自学python,大概要多久?我专科学的机械,在毕业之前完全没有接触过编程,毕业后从零开始学习python,所以在这方面我或许可以说上那么一两句话。第一,你需要明确一个目标。你是想做一个网站?还是说做一个自己用的工具,这会影响你如何去学习python,是否学到一定程度该转去学另一种语言?这都和你想做的事有关系,如果你是希望学习python写一些小工具来提
python的学习难?你的方法不对罢了,看看我的。
1、选择Python版本对于使用python的人来说,python的版本就是我们的工作环境,因此,在学习之前需要考虑好学习哪个版本,python2和python3的版本不同,会存在一些差异,虽说不大,但直接学习python3 的话相对来说会好一点,而且跑一趟还能3相对来说对零基础的小白来说更加的友好,容易上手。2、学习Python基础知识Python 是一个
全网最全python学习路线图,让学习不迷路
学习Python有一段时间了,最近也是在不断的整理Python相关的基础知识和学习一些新的知识,想来分享给大家。我刚开始接触Python时,和大多数初学者一样不知道从那里开始学习python,我也在网上找了许多python相关的资料来学习,但是资料多也不见得就好,因为不知道从哪里开始下手,走了许多弯路。后面我就整理了一套对初学者来说学习python能很快上手
玩转python爬虫
&ensp;&ensp;&ensp;  近几年来,python的热度一直特别火!大学期间,也进行了一番深入学习,毕业后也曾试图把python作为自己的职业方向,虽然没有如愿成为一名python工程师,但掌握了python,也让我现如今的工作开展和职业发展更加得心应手。这篇文章主要与大家分享一下自己在python爬虫方面的收获与见解。 &ensp;&ensp;
盘点一款Python二级考试模拟软件,带你轻松过关二级Python考试
大家好,我是Python进阶者。今天给大家讲的这个软件,主要是想让大家通过这个软件能将自己的Python基础进一步提高。一、前言相信有些小伙伴学习Python有一段时日,但是又不知道自己的Python基础学的如何,这个时候就需要一款神器来检测一下自己的Python基础了。要想检测自己的Python功力最直观的方法当然是做题了,至于做什么题了我们就不得而知了,