Python基础学习笔记(4)文件操作与高阶函数
前言
文件操作及部分高阶函数的学习。
一、文件操作
1.文件的路径
绝对路径和相对路径
对于Windows 系统,绝对路径以分区名加反斜杠开头,路径中的每个目录之间用反斜杠进行分隔。
相对路径则是从一个参考位置出发,也就是说他表示从那个位置来看其他文件处于什么路径。用相对路径时,我们用点来表示,参照文件当前所在的目录,用点点表示更上一层的负目录。如果继续往上走,就用点点跟上斜杠或反斜杠进行分隔,这取决于操作系统后面再跟上点点表示当前文件所属目录的父目录。如果是往更下层走的话,同样以斜杠或反斜杠来分隔路径中的目录,所以可以看出来相对路径都是以点或者点开头的。
Pycharm右键点击文件,选择复制路径引用,你就可以获得那个文件的绝对路径,以及以最顶层项目目录为参考的相对路径。能用绝对路径或相对路径来定位文件的位置后,我们就可以对文件进行操作了。
2.读文件
用 Python 读文件的第一步操作得是先打开目标文件。我们用 open 函数里面先放上文件的路径,可以是相对路径,也可以是绝对路径。第二个参数是模式,模式是一个字符串,常见的模式包括 r 表示读取模式, w 表示写入模式。比如下面的函数:
open("/usr/demo/data.txt", "r") #“r“ 读取模式 (只读) ‘w’写入模式(只写)
不写参数时默认为读取模式,在读取模式下,程序找不到你传入的文件名的话,就会报一个叫 file not found error 的错误,提示文件不存在。如果 open 函数执行成功,会返回一个文件对象,我们可以后续对它进行读取或写入操作。
针对读文件来说,文件对象有个read的方法,我们调用后它就会一次性读取文件里面所有内容,并以字符串形式进行返回。
open("/usr/demo/data.txt", "r")
print(f.read())
如果你不想一次性读完整个文件,可以给 read 传一个数字,表示读多少字节,下一次调用 read 的时候就会从那个位置继续往下读。
f = open("./data.txt", "r", encoding="utf-8")
print(f.read(10))#会读第1-10个字节的文件内容
print(f.read(10))#会读第11-20个字节的文件内容
实验下读文件,比如这个文件就在程序的根目录下,名字叫做data.txt 这样就可以用相对路径来读。
open(‘./data.txt’,‘r’) #这里引号和字符串一样单引号双引号都可以。
返回文件对象命名为f,代码就是
f=open(‘./data.txt’,'r')
content=f.read()
print(content)
f.close() #这里还要关闭文件释放资源
为了不要忘掉关闭文件,Python推荐用with open 来打开文件,具体语法为:
with open("./data.txt", "r", encoding="utf-8") as f:
content=f.read()
print(content)
记得前面要有缩进对该文件对象的所有的操作前面都得有缩进,那假如说第二行前面我不给缩进,它不在这个 with 下面的话,那运行到这行的时候文件对象其实已经被自动的关闭了,所以它就会产生一个报错,我们把缩进给它恢复正确再运行一下。
3.写文件
with open('./unknown.txt','w') as f:
f.write('hello world'\n) #注意这里不加换行符是不会自动换行的
f.write('You are so beautiful')
用w的话会将文件中原有的部分都清空,而如要追加的话用参数“a”
那么每次都要先读再写吗,当然不是,可以用参数r+,这样调用读和写就都不会出错了。
下面是实际操作,
任务1:在一个新的名字为"poem.txt"的文件里,写入以下内容:
我欲乘风归去,
又恐琼楼玉宇,
高处不胜寒。
任务2:在上面的"poem。txt"文件结尾处,添加以下两句:
起舞弄清影,
何似在人间。
任务1:
with open('./poem.txt','w',encoding='utf-8') as f:
f.write('我欲乘风归去,\n又恐琼楼玉宇,\n高处不胜寒。\n')
#写入的text文字如下:
我欲乘风归去,
又恐琼楼玉宇,
高处不胜寒。
任务2:
with open('./poem.txt','a',encoding='utf-8') as f:
f.write('起舞弄清影,\n何似在人间。')
二、高阶函数
在函数中调用函数的方式就是高阶函数,
defcalculate_square(num) :
returnnumnum
def calculate_cube(num) :
returnnumnumnum
def calculate_plus_10(num):
returnnum +10
calculate_and_print(7, calculate_times_5) #这个函数的就是7x5