文件的定位读写:
每个文件对象都有一个称为“文件读写位置”的属性,该属性会记录当前读写的位置。
文件读写位置默认为0,即读写位置默认在文件首部。Python提供了一些获取与修改文件读写位置的方法,以实现文件的定位读写。
1.seek()方法(使用该方法可控制文件的读写位置,实现文件的随机读写)
<f>.seek(offset,from) 改变当前文件操作指针的位置。
seek()方法中的参数offset表示偏移量,即读写位置需要移动的字节数
from用于指定文件的读写位置,该参数的取值为0、1、2,它们代表的含义为:
0:表示文件开头
1:表示使用当前读写位置
2:文章末尾
seek( )方法调用成功后会返回当前读写位置。
代码示例如下:
fo=open("f","w+") ls=["中国","法国","美国"] fo.writelines(ls)# 此处指针在文件末尾 for line in fo: print(line) fo.close()
此时的运行界面如下:
使用seek()方法后的代码示例如下:
fo=open("f","w+") ls=["中国","法国","美国"] fo.writelines(ls) #此处指针在文件末尾 fo.seek(0)#利用seek方法将位置放到文件开头 for line in fo: print(line) fo.close()
运行界面如下:
通过以上运行界面,我们了解到将数据写入文件的时候,此时写入为最后一行,此时遍历的时候,从文件的最后一行进行遍历,导致输出为空。利用seek()方法将文件回到开头的时候,此时遍历文件的时候,输出为文件的全部内容。
如果打开的是文本文件,seek()方法只允许相对于文件首部移动文件读写位置
若在参数为1或2的情况下移动文本文件的读写位置,程序会产生错误。
示例代码如下:
fo=open("f","w+") ls=["中国","法国","美国"] fo.writelines(ls) fo.seek(6,1) for line in fo: print(line) fo.close()
运行界面如下:
如果要相对当前读写位置或文件末尾进行位移操作,需以二进制形式打开文件。
代码示例如下:
fo=open("f","rb") fo.seek(6,1) for line in fo: print(line) fo.close()
运行界面如下:
2.tell()方法,用于获取文件当前的读写位置。
代码示例如下:
with open('rgf.txt',mode='r',encoding="utf-8")as f: print(f.tell()) #获取文件读写位置 print(f.read(5)) #利用read()方法移动文件读写位置 print(f.tell()) #再次获取文件读写位置
运行界面如下:
文本文件支持多种编码方式,不同编码方式下字符与字节的对应关系不同,常见的编码方式以及字节与字符的对应关系如表所示:
编码方式 | 语言 | 字符数 | 字节数 |
ASCII | 中文 | 1 | 2 |
英文 | 1 | 1 | |
UTF—8 | 中文 | 1 | 3 |
英文 | 1 | 1 | |
Unicode | 中文 | 1 | 2 |
英文 | 1 | 2 | |
GBK | 中文 | 1 | 2 |
英文 | 1 | 1 |
os模块的常用函数:
除了python的内置方法外,os模块也定义了与文件操作相关的函数,利用这些函数可以实现删除文件、文件重命名、创建/删除目录、获取当前目录、更改默认目录与获取目录列表等操作。
1.remove()函数(删除文件)
使用os模块中的remove()函数可删除文件,该函数要求目标文件存在,其语法格式如下:
remove(文件名)
代码示例如下:
import os with open('ypl.txt',mode='r',encoding="utf-8")as f: print(f.read()) os.remove("f") with open('ypl.txt',mode='r',encoding="utf-8")as f: print(f.read())
运行界面如下:
2.rename()函数(文件重命名)
使用os模块中的rename()函数可以更改文件名,该函数要求目标文件存在,其语法格式如下:
rename(原文件名,新文件名)
代码示例如下:
import os os.rename("ypl.txt","rgf.txt")
运行界面如下:
之后我们运行rgf.txt代码示例如下:
with open('rgf.txt',mode='r',encoding="utf-8")as f: print(f.read())
运行界面如下:
3.mkdir()函数(用于在当前目录下创建目录)
代码示例如下:
import os os.mkdir('dir')
运行界面如下:
待创建的目录不能与已有目录重名
4.rmdir()函数(用于删除目录)
代码示例如下:
import os os.rmdir('dir')
运行界面如下:
通过以上截图进行对比,我们发现dir目录已经被删除。
5.getcwd()获取当前目录
当前目录即python当前的工作路径,os模块中的getcwd()函数用于获取当前目录,调用该函数可获取当前工作目录的绝对路径。
代码示例如下:
import os a=os.getcwd() print(a)
运行界面如下:
6.更改默认目录-chdir()函数
os模块中的chdir()函数用于更改默认目录,若在对文件或文件夹进行操作时传入的是文件名而非路径名,python解释器会从默认目录中查找指定文件,或将新建的文件放在默认目录下。若没有特别设置,当前目录即为默认目录。
示例代码如下:
import os os.chdir('E:\\') print(os.getcwd())
运行界面如下所示:
7.获取文件名列表-listdir()函数
实际应用中常常需要先获取指定目录下的所有文件,在对目标文件进行相应操作。os模块中提供了listdir()函数,使用该函数可方便快捷的获取指定目录下所有文件的文件名列表。
代码示例如下:
import os a=os.listdir('E://') print(a)
运行界面如下: