day09

一 文件操做 (----------------------------------------------------------------------)python

一 介绍vim

计算机系统分为:计算机硬件,操做系统,应用程序三部分。数据结构

咱们用python或其余语言编写的应用程序若想要把数据永久保存下来,必需要保存于硬盘中,这就涉及到应用程序要操做硬件,众所周知,应用程序是没法直接操做硬件的,这就用到了操做系统。操做系统把复杂的硬件操做封装成简单的接口给用户/应用程序使用,其中文件就是操做系统提供给应用程序来操做硬盘虚拟概念,用户或应用程序经过操做文件,能够将本身的数据永久保存下来。app

有了文件的概念,咱们无需再去考虑操做硬盘的细节,只须要关注操做文件的流程:编辑器

#1. 打开文件,获得文件句柄并赋值给一个变量
#2. 经过句柄对文件进行操做
#3. 关闭文件

二 在python中函数

#1. 打开文件,获得文件句柄并赋值给一个变量
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r

#2. 经过句柄对文件进行操做
data=f.read()

#3. 关闭文件
f.close()

三 f=open('a.txt','r')的过程分析工具

#一、由应用程序向操做系统发起系统调用open(...)

#二、操做系统打开该文件,并返回一个文件句柄给应用程序

#三、应用程序将文件句柄赋值给变量f

二 打开文件的模式

文件句柄 = open('文件路径', '模式')

模式能够是如下方式以及他们之间的组合:测试

Character Meaning
‘r' open for reading (default)
‘w' open for writing, truncating the file first
‘a' open for writing, appending to the end of the file if it exists
‘b' binary mode
‘t' text mode (default)
‘+' open a disk file for updating (reading and writing)
‘U' universal newline mode (for backwards compatibility; should not be used in new code)
#1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则建立;存在则清空内容】
a, 之追加写模式【不可读;不存在则建立;存在则只追加内容】

#2. 对于非文本文件,咱们只能使用b模式,"b"表示以字节的方式操做(而全部文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb 
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也须要提供字节类型,不能指定编码

#3. 了解部分
"+" 表示能够同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
a+, 写读【可读,可写】


x, 只写模式【不可读;不存在则建立,存在则报错】
x+ ,写读【可读,可写】
xb

三 操做文件的方法

#掌握
f.read() #读取全部内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.write('1111\n222\n') #针对文本模式的写,须要本身写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,须要本身写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

#了解
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #若是文件打开模式为b,则没有该属性
f.flush() #马上将文件内容从内存刷到硬盘
f.name

四 文件内光标移动

一: read(3):编码

  1. 文件打开方式为文本模式时,表明读取3个字符操作系统

  2. 文件打开方式为b模式时,表明读取3个字节

二: 其他的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但不管哪一种模式,都是以bytes为单位移动的

  2. truncate是截断文件,因此文件的打开方式必须可写,可是不能用w或w+等方式打开,由于那样直接清空文件了,因此truncate要在r+或a或a+等模式下测试效果

五 文件的修改

文件的数据是存放于硬盘上的,于是只存在覆盖、不存在修改这么一说,咱们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

方式一:将硬盘存放的该文件的内容所有加载到内存,在内存中是能够修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    data=read_f.read() #所有读入内存,若是文件很大,会很卡
    data=data.replace('alex','SB') #在内存中完成修改

    write_f.write(data) #一次性写入新文件

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')

方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    for line in read_f:
        line=line.replace('alex','SB')
        write_f.write(line)

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt')

1. Lambda 函数

Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。

Python 函数一般使用 def a_function_name() 样式来定义,但对于 lambda 函数,咱们根本没为它命名。这是由于 lambda 函数的功能是执行某种简单的表达式或运算,而无需彻底定义函数。

lambda 函数可使用任意数量的参数,但表达式只能有一个。

2. Map 函数

Map() 是一种内置的 Python 函数,它能够将函数应用于各类数据结构中的元素,如列表或字典。对于这种运算来讲,这是一种很是干净并且可读的执行方式。

3. Filter 函数

filter 内置函数与 map 函数很是类似,它也将函数应用于序列结构(列表、元组、字典)。两者的关键区别在于 filter() 将只返回应用函数返回 True 的元素。

咱们不只评估了每一个列表元素的 True 或 False,filter() 函数还确保只返回匹配为 True 的元素。很是便于处理检查表达式和构建返回列表这两步。

4. Itertools 模块

Python 的 Itertools 模块是处理迭代器的工具集合。迭代器是一种能够在 for 循环语句(包括列表、元组和字典)中使用的数据类型。

使用 Itertools 模块中的函数让你能够执行不少迭代器操做,这些操做一般须要多行函数和复杂的列表理解。关于 Itertools 的神奇之处,请看如下示例:

5. Generator 函数

Generator 函数是一个相似迭代器的函数,即它也能够用在 for 循环语句中。这大大简化了你的代码,并且相比简单的 for 循环,它节省了不少内存。

好比,咱们想把 1 到 1000 的全部数字相加,如下代码块的第一部分向你展现了如何使用 for 循环来进行这一计算。

若是列表很小,好比 1000 行,计算所需的内存还行。但若是列表巨长,好比十亿浮点数,这样作就会出现问题了。使用这种 for 循环,内存中将出现大量列表,但不是每一个人都有无限的 RAM 来存储这么多东西的。Python 中的 range() 函数也是这么干的,它在内存中构建列表。

代码中第二部分展现了使用 Python generator 函数对数字列表求和。generator 函数建立元素,并只在必要时将其存储在内存中,即一次一个。这意味着,若是你要建立十亿浮点数,你只能一次一个地把它们存储在内存中!Python 2.x 中的 xrange() 函数就是使用 generator 来构建列表。

若是你想对列表进行屡次迭代,而且它足够小,能够放进内存,那最好使用 for 循环或 Python 2.x 中的 range 函数。由于 generator 函数和 xrange 函数将会在你每次访问它们时生成新的列表值,而 Python 2.x range 函数是静态的列表,并且整数已经置于内存中,以便快速访问。

相关文章
相关标签/搜索