文件的知识点
知识点一.如何打开文件
f = open('demo.txt', 'r', encoding='utf-8') #以只读的形式打开
# 读取文件内容
print(f.read())
# 关闭文件
f.close()
另一种方式,使用'w+'模式打开文件,允许读写
f = open('demo001.txt', 'w+')
f.write('hello world') #写入 hello world
print(f.tell()) # 输出当前文件指针位置
f.seek(0) # 将文件指针移动到文件开头
print(f.read()) # 读取文件内容
f.close()
使用'w+'模式写入多行
f = open('test2.txt', 'w+')
print(f.write("hello world\n"))
print(f.write("hello \nworld"))
f.close()
使用'a'模式追加内容
f = open('test2.txt', 'a')
f.write("\npython")
f.close()
读取文件内容并写入到另一个文件
f1 = open('test2.txt', 'r')
a = f1.readlines()
f2 = open('demo001', 'w')
f2.writelines(a) #将f2的内容写入f1中
f1.close()
f2.close()
使用with语句自动管理文件关闭
with open('test2.txt', 'r') as f3: f3为一个对象
print(f3.read())
知识点二.OS模块(重要 难点)
Python文件路径与操作笔记
-
绝对路径与相对路径
-
绝对路径:从根目录(或特定参考点)开始的! 完整!路径,例如 E:\class_45\011.文件\os模块.py。
-
相对路径:相对于当前工作目录的路径,例如如果当前工作目录是 E:\class_45,那么 011.文件\os模块.py 就是相对路径。
示例地址
示例地址(相对路径):重庆市南岸区 #这是基于你当前路径
示例文件路径(绝对路径):E:\class_45\011.文件\os模块.py
Python中与路径操作相关的模块
-
os模块
- os.getcwd() 显示当前路径
- listdir(path) 展示当前目录内容
- os.chdir(path) 改变当前路径
- os.mkdir(文件名) 创建目录
- os.rmdir(文件名) 删除目录
- os.system() 使用Linux命令
- os.remove(文件名) 删除文件
- os.rename 重命名
路径的拼接
# 正确的路径拼接方式
import os
path = os.path.join('C:', 'Users', 'tongyao')
print(path) # 输出: C:\Users\tongyao
# b = '\\'.join(['C:Users','tongyao']) # 错误的方式
文件夹的创建
import os
#用循环批量创建文件夹
for i in range(20):
os.mkdir('tongyao'+str(i))
#判断文件夹是否存在 存在则创建 反之亦然
if not os.path.exists(new_file):
os.mkdir(new_file) #存在则创建
os.chdir(path) 改变当前路径 path为改变的路径
import os
os.chdir(path)
os.rmdir(文件名) 删除目录
###os.rmdir(path)
os.system(+linux命令) 使用Linux命令 shell 编程
import os
os.system("ls")
os.remove(文件名) 删除文件 与rmdir不同
os.rename 重命名
import os
os.rename(old_file,new_file) # 旧文件名,新文件名
-
os.path 模块
- os.path.join(path1,path2......) 路径拼接
- os.path.dirname 所在的目录、父级目录
- os.path.basename 基本短路径
- os.path.abspath 绝对路径
- os.path.relpath 相对路径
- os.path.getsize 资源大小
- os.path.exists 路径是否存在
- so.path.isdir 是否是目录
- os.path.isfile 是否是文件
- os.path.isabs 是否是绝对路径
- os.path.getctime、getatime、getmtime 资源时间:创建、访问、修改
路径拼接
- os.path.join(path1, path2, ...):
该函数用于将多个路径组件合并成一个路径。
import os
path = os.path.join('usr', 'bin', 'python3')
print(path) # ,如:
#'usr\\bin\\python3'
目录和文件名操作
- os.path.dirname(path):
返回所选路径的最后一个目录的父目录。
import os
dirname = os.path.dirname('/usr/bin/python3')
print(dirname) # 输出: /usr/bin
- os.path.basename(path):
返回给定路径的基本名(即最后一级目录的文件名)
import os
basename = os.path.basename('/usr/bin/python3')
print(basename) # 输出: python3
路径的绝对与相对 abs 绝对
- os.path.abspath(path):
返回给定路径的绝对路径。
import os
abspath = os.path.abspath('.') # . 表示当前目录 也可以输入相对路径
print(abspath) # 输出当前工作目录的绝对路径
- os.path.relpath(end path, start path):
返回从start路径到path的相对路径。
import os
relpath = os.path.relpath('/usr/bin/python3', '/usr')
print(relpath) # 输出: bin/python3
文件和目录属性
- os.path.getsize(path):
返回指定路径的文件大小(以字节为单位)。
import os
size = os.path.getsize('/usr/bin/python3')
print(size) # 输出文件大小
- os.path.exists(path):
检查路径是否存在。
import os
exists = os.path.exists('/usr/bin/python3')
print(exists) # 输出: True 或 False
- os.path.isdir(path) 和 os.path.isfile(path):
分别检查给定路径是否是一个目录或文件。
import os
isdir = os.path.isdir('/usr/bin') #检查是否是一个目录
isfile = os.path.isfile('/usr/bin/python3') #检查是否是一个文件
print(isdir) # 输出: True 或 False
print(isfile) # 输出: True 或 False
- os.path.isabs(path):
检查路径是否为绝对路径。
import os
isabs = os.path.isabs('/usr/bin/python3') #检查目录是否有子目录
print(isabs) # 输出: True
文件的时间属性
- os.path.getctime(path)、
- os.path.getatime(path)、
- os.path.getmtime(path):
分别返回文件的创建时间、最后访问时间和最后修改时间(以秒为单位,自纪元以来的时间戳)。
import os
ctime = os.path.getctime('/usr/bin/python3')
atime = os.path.getatime('/usr/bin/python3')
mtime = os.path.getmtime('/usr/bin/python3')
print(ctime) #输出文件的最后创建的时间
print(atime) #输出文件的最后访问的时间
print(mtime) # 输出文件的最后修改的时间 且时间为时间戳
知识点三:stringIO与bytesIO
- io Input/Output 输入,输出
假的文件 临时文件 内存中读数据是非常快的
io可以临时储存一些东西
------字符串
import io
myio = io.StringIO() # 创建一个对象进行保存读取
myio.write('hello')
# myio.seek(0)
print(myio.readlins())
print(myio.getvalue())
临时的
myio.close() # 虽然关闭对象后,内存中的数据不会立即消失(由Python的垃圾回收机制处理),但良好的实践是完成操作后关闭它。
------字节
bio = io.BytesIO()
bio.write(b'hahhaha')
print(bio.getvalue()) #输出:b'hahhaha' 注意此处的b不能少
bio.close() #关闭bio
byte_str = b'fdsfdsafds'
text_str = byte_str.decode('utf-8')
print(text_str) # 输出: fdsfdsafds,没有b前缀
#当你看到在Python中打印出的字节串(如b'fdsfdsafds')时,前缀b是Python解释器用来区分字节串(bytes)和文本字符串(str)的一种方式。这个b前缀并不是字节串数据的一部分,它只是在打印或者表示字节串时被Python解释器自动添加的。