一、文件路径
在Windows系统中,每个磁盘都有自己的根目录,用分区名加反斜杠来表示。我们定位文件的位置有两种方法,一种是绝对路径,另一种是相对路径。绝对路径是从根目录出发的路径,路径中的每个路径之间用反斜杠来分隔,最后以目标文件或目标目录结尾。相对路径是从一个参照位置出发,我们把参照位置的路径用.来表示,用..来表示更高一级的父目录,再上就用..\..来表示父目录的父目录。往下的规则与绝对路径的相似,以反斜杠为分隔。如果是在同一个文件夹下文件,我们可以省略.\来表示路径。注意下面的第二张图中的斜杠应该改为反斜杠。
很多编辑器能帮我们找到路径,在pycharm中右击文件我们就可以复制这个文件的绝对路径。
二、read方法
f=open(".\\date.txt","r",encoding="utf-8")
print(f.read()) #会读全部文件内容,并打印
print(f.read()) #因为文件内容已经读完,会读空字符串,并打印
f.close()
open后第一个是查看文件的路径,这里使用了相对路径。第二个是操作方式,这里是r也就是read,表示读取文件。第三个是编码方式,这里选择了比较普遍的utf-8。在最后,f.close() 就是在关闭文件,释放资源。
f=open(".\\date.txt","r",encoding="utf-8")
print(f.read(5))
f.close()
我们也可以选择我们需要查看的字符的个数,只需要加一个操作数来表示就能实现。若下面又来一段print(f.read(5))也会按照顺序继续读取并打印。
如果我们需要对文件内容进行一行一行的读取打印,我们可以使用readline()的操作。
f=open(".\\date.txt","r",encoding="utf-8")
print(f.readline()) #读取输出一行
print(f.readline()) #读取输出一行
f.close()
我们发现两行内容中间出现了空行,这是为什么呢?不妨我们先来看看readlines方法。
f=open(".\\date.txt","r",encoding="utf-8")
print(f.readlines()) # readlines会读全部文件内容,并把每行作为列表元素返回
f.close()
现在我们可以来分析readline中出现空行的原因了。在readlines方法的结果中,我们可以看出每行其实都包括\n,又因为两个print语句之间默认会换行,所以就会出现空行。
我们来看看readline一般是如何使用的。
f=open(".\\date.txt","r",encoding="utf-8")
line=f.readline() #读第一行
while line != '': #判断当前行是否为空
print(line) #不为空则打印当行
line = f.readline() #读取下一行
f.close()
再来看看readlines一般是如何使用的。
f=open(".\\date.txt","r",encoding="utf-8")
lines=f.readlines() #读文件所有内容
for line in lines: #用for语句循环每行的内容
print(line) #打印当行
f.close()
有没有发现我们每次结束查看时都需要f.close()来关闭文件,有时候容易忘记。所以我们读取文件还可以使用另一种形式。需要注意的是缩进。
with open(".\\date.txt","r",encoding="utf-8") as f:
lines=f.readlines() #读文件所有内容
for line in lines: #用for语句循环每行的内容
print(line) #打印当行
三、write方法
当我们写入时,只需要将"r"改为"w"就可以了,也就是write写入的意思。
with open(".\\date.txt","w",encoding="utf-8") as f:
在前面我们读取文件时,如果路径不存在,就会出现报错。但是在我们写入文件时并不会,如果路径不存在,会直接创建该路径下的一个文件,并写入。而且,如果该路径下原有文件内容,我们写入时会直接覆盖原有内容。
接下来看如何写入文件内容。
with open(".\\date.txt","w",encoding="utf-8") as f:
f.write("hello ")
f.write("world")
我们打开date.txt文件进行查看。
需要注意的是,这里的write方法并不会自动换行,如果需要换行就要使用换行符\n。
有时候我们需要的是向文件中添加内容,而不是直接将他替换掉。
这时候我们可以将"w"改为"a",也就是add添加。如果文件原本不存在,也会创建一个。注意的是,这两种方法都不能对文件进行读取。
with open(".\\date.txt","a",encoding="utf-8") as f:
f.write("hello ")
f.write("world")
那我们将"w"改为"a"之后再运行一遍,我们会发现文件中有两个一样的字符串,一个就是我们刚才write方法写入的,另一个是我们刚刚通过添加写入的。
写入时却不能读取文件有时会比较麻烦。那我们怎么才能同时进行读写文件操作呢?将"a"改为"r+"就可以了。
with open(".\\date.txt","r+",encoding="utf-8") as f:
print(f.read())
f.write("hello ")
f.write("world")
当我们第一次运行这个程序时,因为该文件内容为空,所以打印空字符,接下来才执行写入,只要在第二次再执行时,才可以打印出文本中的内容。