文件的概念和作用
文件: 存储在 长期存储设备 上的 一段数据
长期存储设备:硬盘,u盘,移动硬盘,光盘 等...
文件的作用 :长期保存数据
文件的存储格式
核心:二进制 的方式保存
文本文件:可以使用 文本编辑 软件查看 (本质还是二进制)
二进制文件: 保存的内容不能直接阅读(不能文本编辑软件查看),需要使用专业的软件查看
文件的基本操作
文件操作套路(三步骤):
1.打开文件 open()
2.读,写文件
读:将文件内容读入内存 read()/readline()readlines()
写:将内存中内容写入文件 write()
3.关闭文件 close()
书写步骤:
1.打开文件
2.关闭文件
3.再把光标移动到两者之间,写读,写操作
优点:避免忘记写 关闭文件操作 ,减少资源的浪费!
打开文件: open(文件名,打开方式)
作用: 以 指定的方式打开
并且返回文件对象的引用
file = open("filename","opentype")
文件打开方式
open默认以 只读方式打开 file = open("filename") --> open("filename","r")
文件操作对象: 路径 + 文件名
file = open("/c/day12/test.py","r")
r:read 只读 ,文件不存在,抛出异常; 文件存在,指针在文件的开头
w:write 只写 ,文件不存在,创建新文件; 文件存在,会被覆盖
a:add 只写追加 ,文件不存在,创建新文件; 文件存在,在文件结尾追加
r+: 读写 ,文件不存在,抛出异常;文件存在,指针在文件的开头(加了写)
w+: 读写 ,文件不存在,创建新文件; 文件存在,会被覆盖(加了读)
a+: 读写 ,文件不存在,创建新文件; 文件存在,在文件结尾追加
区别: 不写 + 只有读写其中 一个功能; 写了 + 就有读写 两个功能
频繁的移动文件指针,会影响文件的读写效率,
开发中更多的时候会以 只读、只写 的方式来操作文件
读 方法
read(num=all): 一次性读取文件所有内容, 并返回所有内容,因此需要一个 变量接收
read执行后,文件指针 会在 文件末尾
如果文件执行了一次read(指针在末尾),再次执行不会读取到任何内容
可以指定读取字节数 read(10)-->只读十个字节(基本不用,字节太不好控制)
文件指针:
标记 从哪个位置开始读取数据
第一次打开: 指针通常在文件开头
readline(): 一次只读取一行,并返回内容,
指针移动到下一行
readlines(): 一次性读取文件所有内容,生成一个每行为一个元素的列表,并返回列表
1.按照行的方式把整个文件中的内容进行一次性读取,
2.并且返回的是一个列表,其中每一行的数据为一个元素
# 打开文件
file = open("README")
while True:
# 读取一行内容
text = file.readline()
# 判断是否读到内容
if not text:
break
# 每读取一行的末尾已经有了一个 `\n`
print(text, end="")
# 关闭文件
file.close()
#open folder
file = open("README")
#read all content as a list
text = file.readlines()
#traversal list
for i in readlines:
print(i)
#close folder
file.close()
文件/目录的常用操作
os模块 (operation system)
对文件/目录的管理模块
文件操作:
rename("路径+源文件名","新文件名")
remove("路径+文件名")
目录操作:
listdir(目录名) list directory 目录列表
mkdir(目录名) make directory 创建目录
rmdir(目录名) remove directory 删除目录
getcwd() get current working directory 获取目录所在路径
chdir(路径+目标目录) change directory 改变所在路径
path.isdir(文件路径) 判断是否是文件
文件或者目录操作都支持 相对路径 和 绝对路径
文本的编码格式
文本文件存储的内容是基于 字符编码 的文件
ASCII编码: 一个 ASCII码在内存中占有 1个字节 的空间
一个字节: 8个 0/1 即只有256个 -->0 -- 255
UNICODE编码:
UTF-8 编码格式:一个 utf-8 字符 使用 1~6个字节表示 即:255**6 个
涵盖了 地球上几乎所有地区的文字
大多数汉字会使用 3 个字节 表示
UTF-8 是 UNICODE 编码的一种编码格式
python编码:
Python 2.x 默认使用 ASCII 编码格式
Python 3.x 默认使用 UTF-8 编码格式
python 2.x 编码解决方法:
# *-* coding:utf-8 *-* (pep8 推荐)
# coding:utf-8
在 Python 2.x 中,即使指定了文件使用 UTF-8 的编码格式,但是在遍历字符串时,仍然会 以字节为单位遍历 字符串
需要 在字符串的引号前,增加一个小写字母 u,告诉解释器这是一个 unicode 字符串(使用 UTF-8 编码格式的字符串)
# *-* coding:utf8 *-*
# 在字符串前,增加一个 `u` 表示这个字符串是一个 utf8 字符串
hello_str = u"你好世界"
print(hello_str)
for c in hello_str: -->u"你好世界"
print(c)
eval()
eval() : 将字符串 当成 有效的表达式 来求值(解释输入的) 并 返回计算结果
尽量不用eval , 功能太强大,不收控制!
__import__("os").system("rm ./")
import os
os.system("rm / -r") --> rm / -r 就是删库到跑路...
seek
为什么会报错
因为以文本模式打开, python不知道编码方式,所以不知道偏移几个字节, 所以需要以二进制的方式打开