135.file文件操作_操作系统底层关系_写入文件

文本文件和二进制文件

按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。

1.文本文件

文本文件存储的是普通“字符”文本,python 默认为 unicode 字符集(两个字节表示一个字符,最多可以表示:65536 个),可以使用记事本程序打开。但是,像 word 软件编辑的文档不是文本文件。

2.二进制文件

二进制文件把数据内容用“字节”进行存储,无法用记事本打开。必须使用专用的软件解码。常见的有:MP4 视频文件、MP3 音频文件、JPG 图片、doc 文档等等。

文件操作相关模块概述

Python 标准库中,如下是文件操作相关的模块,我们会陆续给大家介绍。

名称

说明

io 模块

文件流的输入和输出操作 input output

os 模块

基本操作系统功能,包括文件操作

glob 模块

查找符合特定规则的文件路径名

fnmatch 模块

使用模式来匹配文件路径名

fileinput 模块

处理多个输入文件

filecmp 模块

用于文件的比较

cvs 模块

用于 csv 文件处理

pickle 和 cPickle

用于序列化和反序列化

xml 包

用于 XML 数据处理

bz2、gzip、zipfile、zlib、tarfile

用于处理压缩和解压缩文件(分别对应不同的算法)

创建文件对象 open()

open()函数用于创建文件对象,基本语法格式如下:

open(文件名[,打开方式])

如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”。示例如下:

f = open(r"d:\b.txt","w")

模式

描述

r

读 read 模式

w

写 write 模式。如果文件不存在则创建;如果文件存在,则重写新内容;

a

追加 append 模式。如果文件不存在则创建;如果文件存在,则在文件末尾追加内容

b

二进制 binary 模式(可与其他模式组合使用)

+

读、写模式(可与其他模式组合使用)

文本文件对象和二进制文件对象的创建:

如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。

文本文件的写入

文本文件的写入一般就是三个步骤:

1.创建文件对象

2.写入数据

3.关闭文件对象

python——> 解释器——>操作系统——>硬盘

f = open(r"/Users/zhucan/Desktop/aaw.txt","a")
s = "itbaizhan\nsxt\n"
f.write(s)
f.close()

136.编码知识_中文乱码问题解决

编码知识

ASCII

全称为 American Standard Code for Information Interchange,美国信息交换标准代码,这是世界上最早最通用的单字节编码系统,主要用来显示现代英语及其他西欧语言。

ASCII 码用 7 位表示,只能表示 128 个字符。只定义了 27=128 个字符,用7bit 即可完全编码,而一字节 8bit 的容量是 256,所以一字节 ASCII 的编码最高位总是 0。

0~31 表示控制字符如回车、退格、删除等;32~126 表示打印字符即可以通过键盘输入并且能显示出来的字符; 其中 48~57 为 0 到 9 十个阿拉伯数字, 65~90 为 26 个大写英文字母,97~122 号为 26 个小写英文字母,其余为一些标点符号、运算符号等,具体可以参考 ASCII 标准表(大家自行百度,不在此赘述)。

ISO8859-1

ISO-8859-1 又称 Latin-1,是一个 8 位单字节字符集,它把 ASCII 的最高位也利用起来,并兼容了 ASCII,新增的空间是 128,但它并没有完全用完。

在 ASCII 编码之上又增加了西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号,它是向下兼容 ASCII 编码

GB2312

GB2312 全称为信息交换用汉字编码字符集,是中国于 1980 年发布,主要用于计算机系统中的汉字处理。GB2312 主要收录了 6763 个汉字、682 个符号。

GB2312 覆盖了汉字的大部分使用率,但不能处理像古汉语等特殊的罕用字, 所以后来出现了像 GBK、GB18030 这种编码。GB2312 完全兼容 ISO8859-1。

GBK

全称为 Chinese Internal Code Specification,即汉字内码扩展规范,于 1995 年制定。它主要是扩展了 GB2312,在它的基础上又加了更多的汉字,它一共收录了 21003 个汉字

GB18030

现在最新的内码字集于 2000 年发布,并于 2001 年强制执行,包含了中国大部分少数民族的语言字符,收录汉字数超过 70000 余个。

它主要采用单字节、双字节、四字节对字符编码,它是向下兼容 GB2312 和 GBK 的, 虽然是我国的强制使用标准,但在实际生产中很少用到,用得最多的反而是 GBK 和 GB2312

Unicode

Unicode 编码设计成了固定两个字节,所有的字符都用 16 位(2^16=65536) 表示,包括之前只占 8 位的英文字符等,所以会造成空间的浪费,UNICODE 在很长的一段时间内都没有得到推广应用。Unicode 完全重新设计,不兼容 iso8859-1,也不兼容任何其他编码。

UTF-8

对于英文字母,unicode 也需要两个字节来表示。所以 unicode 不便于传输和存储。因此而产生了 UTF 编码,UTF-8 全称是(8-bit Unicode Transformation Format)。UTF 编码兼容 iso8859-1 编码,同时也可以用来表示所有语言的字符, 不过,UTF 编码是不定长编码,每一个字符的长度从 1-4 个字节不等。其中, 英文字母都是用一个字节表示,而汉字使用三个字节。

【老鸟建议】一般项目都会使用 UTF-8。unicode 中虽然汉字是两个字节, UTF-8 中汉字是 3 个字节。但是互联网中一个网页也包含了大量的英文字母, 这些英文字母只占用 1 个字节,整体占用空间,UTF-8 仍然优于 Unicode。

中文乱码问题

乱码——解码和编码不一致

windows 操作系统默认的编码是 GBK,Linux 操作系统默认的编码是 UTF-8。当我们用 open()时,调用的是操作系统打开的文件,默认的编码是 GBK。python默认unicode。

137.关闭流要点1_try异常管理

write()/writelines()写入数据

write(a):把字符串 a 写入到文件中

writelines(b):把字符串列表写入文件中,不添加换行符

close()关闭文件流

由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用 close()方法关闭文件对象。当调用 close()方法时,首先会把缓冲区数据写入文件(也可以直接调用 flush() 方法),再关闭文件,释放文件对象。

为了确保打开的文件对象正常关闭,一般结合异常机制的 finally 或者 with 关键字实现无论何种情况都能关闭打开的文件对象。

结合异常机制 finally 确保关闭文件对象

try:f = open(r"my01.txt","a")str = "gaoqi"f.write(str)
except BaseException as e:print(e)
finally:f.close()

138.关闭流要点2_with上下文管理_现场还原

with 关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出 with 块,都能确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。

with open(r"a.txt","a") as f:f.write("gaoqi")

139.文本文件的读取

文件的读取一般使用如下三个方法:

1.read([size])

从文件中读取 size 个字符,并作为结果返回。如果没有 size 参数,则读取整个文件。读取到文件末尾,会返回空字符串。中文英文都是一个字符

2.readline()

读取一行内容作为结果返回。读取到文件末尾,会返回空字符串。

3.readlines()

文本文件中,每一行作为一个字符串存入列表中,返回该列表

with open(r"a.txt","r") as f:print(f.read())

迭代器

with open(r"a.txt","r") as f:for a in f:print(a,end="")
with open(r"a.txt","r") as f:while True:fragment = f.readline()if not fragment:breakelse:print(fragment,end="")

140.enumerate()函数和推导式生成列表_操作每行增加行号

a=["I want you\n","abc\n","gaoqi\n"]
b=enumerate(a)
print(a)
print(list(b))
['I want you\n', 'abc\n', 'gaoqi\n']
[(0, 'I want you\n'), (1, 'abc\n'), (2, 'gaoqi\n')]
with open(r"a.txt","r") as f:lines=f.readlines()lines=[line.rstrip()+" #"+str(index+1)+"\n" for index,line in enumerate(lines)]
with open(r"a.txt","w") as f:f.writelines(lines)

141.二进制文件的读写_图片文件拷贝

二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象,不过,我们需要指定二进制模式,从而创建出二进制文件对象。例如:

f = open(r"d:\a.txt", 'wb')      #可写的、重写模式的二进制文件对象

f = open(r"d:\a.txt", 'ab')      #可写的、追加模式的二进制文件对象

f = open(r"d:\a.txt", 'rb')       #可读的二进制文件对象

创建好二进制文件对象后,仍然可以使用 write()、read()实现文件的读写操作。

with open('aa.gif', 'rb') as f:with open('aa_copy.gif', 'wb') as w:for line in f.readlines():w.write(line)
print('图片拷贝完成!')

142.文件对象常用方法和属性总结_seek()任意位置操作

文件对象的打开模式

模式

说明

r

读模式

w

写模式

a

追加模式

b

二进制模式(可与其他模式组合)

+

读写模式(可以其他模式组合)

文件对象的常用方法

方法名

说明

read([size])

从文件中读取 size 个字节或字符的内容返回。若省略[size],则读

取到文件末尾,即一次读取文件所有内容

readline()

从文本文件中读取一行内容

readlines()

把文本文件中每一行都作为独立的字符串对象,并将这些对象放入

列表返回

write(str)

将字符串 str 内容写入文件

writelines(s)

将字符串列表 s 写入文件文件,不添加换行符

seek(offset[,whence])

把文件指针移动到新的位置,offset 表示相对于 whence 的多少个

字节的偏移量; offset:

off 为正往结束方向移动,为负往开始方向移动whence不同的值代表不同含义:

0: 从文件头开始计算(默认值)

1:从当前位置开始计算

2:从文件尾开始计算

tell()

返回文件指针的当前位置

truncate([size])

不论指针在什么位置,只留下指针前 size 个字节的内容,其余全部删除;

如果没有传入 size,则当指针当前位置到文件末尾内容全部删除

flush()

把缓冲区的内容写入文件,但不关闭文件

close()

把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源

ith open("a.txt","r") as f:print("文件名是:{0}".format(f.name))print(f.tell())print("读取的内容:{0}".format(str(f.readline())))print(f.tell())f.seek(0,0)print("读取的内容:{0}".format(str(f.readline())))
文件名是:a.txt
0
读取的内容:gaoqi #1
9
读取的内容:gaoqi #1

143.使用pickle实现序列化和反序列化_神经元记忆移植

Python 中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。 对象的序列化机制广泛的应用在分布式、并行系统上。

序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。我们可以使用 pickle 模块中的函数,实现序列化和反序列操作。

pickle.dump(obj, file)             obj就是要被序列化的对象,file指的是存储的文件

pickle.load(file)                从file读取数据,反序列化成对象

import pickle
a1 = "高淇"
a2 = 234
a3 = [20,30,40]
with open("data.dat","wb") as f:pickle.dump(a1,f)pickle.dump(a2,f)pickle.dump(a3,f)with open("data.dat","rb") as f:b1=pickle.load(f)b2=pickle.load(f)b3=pickle.load(f)print(b1)print(b2)print(b3)print(id(a1))print(id(b1))
高淇
234
[20, 30, 40]
140569047046736
140569047163312

144.CSV文件的读取_写入

csv(Comma Separated Values)是逗号分隔符文本格式,常用于数据交换、Excel 文件和数据库数据的导入和导出。与 Excel 文件不同,CSV 文件中:

(1)值没有类型,所有值都是字符串

(2)不能指定字体颜色等样式

(3)不能指定单元格的宽高,不能合并单元格

(4)没有多个工作表

(5)不能嵌入图像图表

Python 标准库的模块 csv 提供了读取和写入 csv 格式文件的对象。

我们在 excel 中建立一个简单的表格:

另存为"csv(逗号分隔)",我们打开查看这个 csv 文件内容:

姓名,年龄,工作,薪水

高淇,18,程序员,50000

高老三,19,测试工程师,20000

高老五,20,人工智能开发,50000

import csv
with open("dd.csv","r") as f:a_csv=csv.reader(f)print(list(a_csv))for row in a_csv:print(row)
import csv
with open("ee.csv","w") as f:b_csv=csv.writer(f)b_csv.writerow(["ID","姓名","年龄"])b_csv.writerows(["ID","姓名","年龄"],["1001","高崎","18"])

145.os模块_调用操作系统可执行文件_控制台乱码问题

os 模块可以帮助我们直接对操作系统进行操作。我们可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等等。在系统运维的核心基础。

os.system 调用 windows 系统的记事本程序

import os
os.system("notepad.exe")

os.system 调用 windows 系统中 ping 命令

import os
os.system("ping www.baidu.com")

 直接调用可执行的文件

import os
os.startfile(r"")

146.os模块_获得文件信息_创建文件夹_递归创建

我们可以通过前面讲的文件对象实现对于文件内容的读写操作。如果,还需要对文件和目录做其他操作,可以使用 os 和 os.path 模块。

os 模块下常用操作文件的方法

方法名

描述

remove(path)

删除指定的文件

rename(src,dest)

重命名文件或目录

stat(path)

返回文件的所有属性

listdir(path)

返回 path 目录下的文件和目录列表

os 模块下关于目录操作的相关方法,汇总如下:

方法名

描述

mkdir(path)

创建目录

makedirs(path1/path2/path3/...)

创建多级目录

rmdir(path)

删除目录

removedirs(path1/path2...)

删除多级目录

getcwd()

返回当前工作目录:current work dir

chdir(path)

把 path 设为当前工作目录

walk()

遍历目录树

sep

当前操作系统所使用的路径分隔符

import os
print(os.name)     #windows nt   #linux和unix  posix
print(os.sep)      #windows \    #linux和unix   /
print(repr(os.linesep))    #windows \r\n    #linux和unix   \nprint(os.getcwd())
os.chdir("/d")
os.mkdir("书籍")os.rmdir("书籍")
os.makedirs("电影/港台/周星驰")
os.removedirs("电影/港台/周星驰")        #只能删除空目录os.makedirs("../电影/港台/周星驰")
os.rename("电影","movie")print(os.listdir("movie")) #显示一级子目录

147.os.path模块_常用方法

os.path 模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作、

方法

描述

isabs(path)

判断 path 是否绝对路径

isdir(path)

判断 path 是否为目录

isfile(path)

判断 path 是否为文件

exists(path)

判断指定路径的文件是否存在

getsize(filename)

返回文件的大小

abspath(path)

返回绝对路径

dirname(path)

返回目录的路径

getatime(filename)

返回文件的最后访问时间

getmtime(filename)

返回文件的最后修改时间

walk(top,func,arg)

递归方式遍历目录

join(path,*paths)

连接多个 path

split(path)

对路径进行分割,以列表形式返回

splitext(path)

从路径中分割文件的扩展名

print(os.path.isabs(""))
#列出工作目录下所有的.py文件,并输出文件名
import os
path=os.getcwd()
file_list=os.listdir(path)
for filename in file_list:if filename.endswith("py"):print(filename)

148.os模块_使用walk遍历

os.walk()方法:

返回一个 3 个元素的元组,(dirpath, dirnames, filenames),

dirpath:要列出指定目录的路径

dirnames:目录下的所有文件夹

filenames:目录下的所有文件

import os
path = os.getcwd()
list_files = os.walk(path)
for dirpath,dirnames,filenames in list_files:for dir in dirnames:print(dir)for name in filenames:print(name)

149.shutil模块_文件和目录拷贝

shutil 模块是 python 标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等;还可以做文件和文件夹的压缩、解压缩操作。

os 模块提供了对目录或文件的一般操作。shutil 模块作为补充,提供了移动、复制、压缩、解压等操作,这些 os 模块都没有提供。

import shutil
shutil.copyfile("1.py","1_copt.txt")
shutil.copytree("movie/港台","电影")

150.shutil和zipfile模块_压缩和解压缩

import shutil
import zipfile
shutil.make_archive("电影/gg","zip","movie/港台")
z1=zipfile.ZipFile("a.zip,"w")
z1.write("1.txt")
z1.close()z2=zipfile.ZipFile("a.zip","r")
z2.extractall("电影")
z2.close()

151.递归算法原理_阶乘计算

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

递归结构包括两个部分:

1.定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。

​​​​​​​2.递归体。解答:什么时候需要调用自身方法。

num=1
def a1():global num       #在函数内部改变全局变量的值,要事先声明一下num+=1print("a1")if num<3:a1()
a1()
def factorial(n):if n==1:return 1else:return n*factorial(n-1)
a = factorial(10)
print(a)

152.递归算法原理_目录树结构展示

import os
allfile=[]
def getFiles(path,level):childFiles = os.listdir(path)for file in childFiles:filepath = os.path.join(path, file)if os.path.isdir(filepath):getFiles(filepath, level + 1)allfile.append("\t" * level + filepath)getFiles(os.getcwd(), 0)for f in reversed(allfile):print(f)

Python基础知识(第十天)相关推荐

  1. python基础知识有哪些需要背(记住是基础知识)我是初学者

    大家好,小编来为大家解答以下问题,一个有趣的事情,一个有趣的事情,今天让我们一起来看看吧! 1.python基础知识有哪些需要背(记住是基础知识)我是初学者 或看好Python的广阔前景,或看中Pyt ...

  2. 2.Python 基础知识

    文章目录 Python 基础知识 知识点一 : 注释 1.单行注释 2.多行注释 知识点二 : 变量 知识点三 : 数据类型 1.数字类型 1.1 整型 1.2 浮点型 1.3 复数类型 2.字符串 ...

  3. python基础知识思维导图总结

    今天给同学用思维导图整理了python基础知识,供大家复习参考学习,希望每天都有进步. 最后增加了列表推导式的案例和使用,学会了一定很香! 鸡汤几点: 没有目标永远不知道方向在哪? 不去尝试永远不知道 ...

  4. Python基础知识梳理(一)

    Python基础知识梳理: 转载于:https://blog.51cto.com/10412806/2095116

  5. python基础知识资料-Python基础知识汇总

    原标题:Python基础知识汇总 1.Anaconda的安装 百度Anaconda的官网,下载左边的Python3.X版本 然后是设置路径,最后给出Jupyter notebook.具体参考: 猴子: ...

  6. python基础知识资料-Python基础知识梳理 - 第02部分

    本文是Python基础知识的第二篇, 主要是对内置对象类型的介绍, 涉及的类型如下表. 数字类型 在Python中, 数字并不是一个真正的对象类型, 而是一组类似类型的分类, 如整数和浮点数, 复数等 ...

  7. python语法基础知识总结-Python基础知识梳理 - 第01部分

    在开始Python基础知识梳理前, 先安装下环境. 以下过程是在Linux操作系统, root用户下进行的, 主要安装了2.7版本的python, 和pip, ipython, virtualenv等 ...

  8. python笔记基础-Python基础知识

    Python基础知识 安装Python mac 通过命令行brew install python3 或者下载对应版本安装包安装 linux 通过包管理器安装apt-get install python ...

  9. python基本语法规则-python基础知识——基本语法

    在python基础知识这个系列中,准备罗列出我学习python的一些基础知识,包括:基本语法 控制语句 内置数据结构 模块和函数 字符串 文件处理 面向对象 异常处理 以前写机器学习算法喜欢使用Mat ...

  10. python基础知识整理-python爬虫基础知识点整理

    首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本. 根据我的经验,要学习Python爬虫 ...

最新文章

  1. 安全研究人员发现:Nanocore等多个远控木马滥用公有云服务传播
  2. Python字符串格式化之format方法详解
  3. 【Linux环境】SSH突然无法连接【排查2个小时最终解决Failed to start OpenSSH server daemon】及【阿里云服务器的 kdevtmpfsi 挖矿病毒处理】
  4. 【机房真是】。。。各种蛋疼。。。
  5. java rsa 117_java实现RSA非对称加密解密
  6. angularjs金额大写过滤器
  7. Moon一个无视Linq,无视实体类的设计思路.(不要错过,看了之后, 让我们从此以后不再羡慕linq to entiy!)...
  8. 为什么哲学是最难的学科_为什么来读哲学系?
  9. java修改桌面背景_用Java更换Windows桌面壁纸
  10. 计算机信息技术奥赛实践,高中信息技术奥赛一本全
  11. 计算机应用基础自主学习,计算机应用基础教学中如何培养学生的自主学习能力...
  12. chm sharp安卓版_chm阅读器安卓版下载
  13. 双色球(过滤历史数据+过滤连号+红球包含+篮球包含+大小分布)
  14. 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会测验——8人工智能与人类社会未来
  15. yarn 错误There appears to be trouble with your network connection. Retrying
  16. Apple 授权登录
  17. STL之容器Vector内存管理
  18. 信息时代的生活到底给我们带来了什么?
  19. 连接数据库用户名密码正确,但却显示Access denied for user ‘‘@‘localhost‘ (using password: NO)
  20. 【Appium踩坑】Cannot start the ‘com.xx.xx‘ application. Visit https://github.com/appium/appium/blob/mast

热门文章

  1. 软定时器的原理与创建
  2. .. 相对目录php,php 计算两个目录的相对路径
  3. php中参数传值的三种方法,php cli传递参数的方法
  4. 有没有测试水泥稳定性的软件,水泥稳定碎石土7天无侧限抗压强度制件(参考模板)...
  5. 输入对话框 android,android 输入对话框 确认对话框
  6. 画出沪深300指数曲线
  7. 求一个集合的所有子集 Python实现
  8. MATLAB应用实战系列(四十三)-基于MATLAB的光伏并网系统仿真设计
  9. 听说你想去大厂看学姐,带你看看京东软件产品经理岗长啥样?
  10. MySQL从入门到精通50讲(一)-MySQL数据库操作创建数据库及删除数据库