文件模块
一、绝对路径和相对路径:
1. 绝对路径:硬盘上一个不会变的地址。一般情况下可以理解为从根目录开始描述的文件路径。
2. 相对路径:相对当前目录的文件路径。
· “.” 表示当前文件。
· “..” 表示上一层文件夹。
二、os 模块与 os.path 模块:
1. os.path 模块是 os 模块的一个子模块。首先,导入:
import os
2. 获取当前 Python 文件的目录:
import os
print(os.getcwd())
# 输出结果:
#
# E:\programmer\CSDN\Python即时练习
· getcwd() 方法可以获取当前 Python 文件所在工作目录的绝对地址。
3. 获取绝对路径—— os.path.abspath(path):
import os
ret = os.path.abspath("Python即时练习.py")
print(ret)
# 输出结果:
#
# E:\programmer\CSDN\Python即时练习\Python即时练习.py
4. 获取相对路径—— os.path.relpath(path, start):
import os
ret1 = os.path.relpath("E:\\")
ret2 = os.path.relpath("E:\programmer\CSDN\Python即时练习")
print(ret1)
print(ret2)
# 输出结果:
#
# ..\..\..
# .
三、路径检查方法:
检查路径主要是为了检查文件或文件夹是否存在,或者判断一个路径对应的是一个文件夹还是一个文件。
1. exists(path):如果 “path” 文件或文件夹存在则返回 True,否则返回 False;
2. isabs(path):“path” 是绝对路径则返回 True,否则返回 False;
3. isdir(path):“path” 是文件夹则返回 True,否则返回 False;
4. isfile(path):“path” 是文件则返回 True,否则返回 False。
四、目录操作:
1. mkdir(path):创建目录;
2. rmdir(path):删除目录;
3. chdir(path):切换当前工作目录到 “path”;
4. remove(path):删除文件,如果 “path” 是一个目录,会报错。
五、获取文件大小:
getsize():返回值的单位为字节。如:
import os
print(os.path.getsize("E:\programmer\CSDN\Python即时练习\Python即时练习.py"))
# 输出结果:
#
# 895
六、获取指定目录下的所有内容:
1. os.listdir():获取指定目录下的所有内容,包括文件与文件夹。
2. os.walk():遍历目录树,通过循环可以获取到指定目录下所有的文件与文件夹。
七、Python 文件读取:
Python 在读写文件时首先要做的是打开文件,其函数为 open()。
1. 读取文件所有内容:使用 opne() 函数打开文件之后,可以通过 read() 方法读取文件内容。
该方法相当于将文件内容一次性读取到程序的一个字符串中。如:
f = open('test.txt', encoding="utf-8")
read_str = f.read()
print(read_str)
f.close()
# 输出结果:
#
# Python
# 练习测试
# Hello,Python!
# AaBbCcDdEeFfGgHh
# 1234567890+-*///%**&|=
· 使用 open() 打开文件时,必须在文件使用完毕后使用 close() 关闭文件。
2. 逐行读取文件内容:
通过循环调用文件对象,可以逐行输出内容。如:
f = open('test.txt', encoding="utf-8")
for line in f:
print(line)
f.close()
# 输出结果:
#
# Python
#
# 练习测试
#
# Hello,Python!
#
# AaBbCcDdEeFfGgHh
#
# 1234567890+-*///%**&|=
· .txt 文件中,每行的末尾默认有一个换行符,print() 函数也会带一个换行符。解决方法:
f = open('test.txt', encoding="utf-8")
for line in f:
print(line, end="")
f.close()
# 输出结果:
#
# Python
# 练习测试
# Hello,Python!
# AaBbCcDdEeFfGgHh
# 1234567890+-*///%**&|=
3. 逐行读取方法 readlines():
使用 readlines() 方法可以将数据一次性读取到一个列表中。如:
f = open('test.txt', encoding="utf-8")
data = f.readlines()
print(data)
f.close()
# 输出结果:
#
# ['Python\n', '练习测试\n', 'Hello,Python!\n', 'AaBbCcDdEeFfGgHh\n', '1234567890+-*///%**&|=']
· 输出内容中每行读取到的字符串都带一个 “\n” 换行符。
4. with 上下文管理器:
语法格式:
with open(待打开文件) as 文件对象:
文件操作代码块
如:
with open('test.txt', encoding="utf-8") as f:
read_str = f.read()
print(read_str)
# 输出结果:
#
# Python
# 练习测试
# Hello,Python!
# AaBbCcDdEeFfGgHh
# 1234567890+-*///%**&|=
八、Python 写入文件:
1. 语法格式:
文件对象.write(待写入内容)
2. 具体示例:
file = 'test.txt'
with open(file, mode="w", encoding="utf-8") as f:
f.write("我是即将被写入的内容")
with open(file, encoding="utf-8") as f:
read_str = f.read()
print(read_str)
# 输出结果:
#
# 我是即将被写入的内容
· 待写入的内容需为字符串类型,其他类型写入会报错。
· mode=“w” 方式写入后会覆盖原内容,追加数据用 mode=“a”。
· open() 函数关于 mode 参数的其他值:
3. 写入多行数据:
file = 'test.txt'
with open(file, mode="w", encoding="utf-8") as f:
f.write("我是即将被写入的内容1\n")
f.write("我是即将被写入的内容2")
with open(file, encoding="utf-8") as f:
read_str = f.read()
print(read_str)
# 输出结果:
#
# 我是即将被写入的内容1
# 我是即将被写入的内容2
九、文件复制:
1. 语法格式:
shutil.copy(旧文件,新文件)
2. 具体示例:
import shutil
shutil.copy("test.txt","aaa.txt")
shutil.copy("test.txt","../aaa.txt")
十、目录复制:
1. 语法格式:
shutil.copytree(旧目录,新目录)
2. 具体示例:
import shutil
shutil.copytree("../test","test0")
· 如果目录之下有子目录或文件,也会一起复制。
· 执行代码时,需确保新目录不存在,否则会报错。
十一、move() 方法:
1. 使用 move() 方法移动文件:
语法格式:
shutil.move(旧文件,新文件)
2. 使用 move() 方法可以修改文件名,在移动文件过程中,如果新旧文件名称不一致,可实现移动文件并重命名的效果。
3. 使用 move() 方法还可以移动目录。移动目录时,会将该目录下的所有子目录和文件一起移动。同样,如果新、旧目录名称不一致,也可以实现移动目录并重命名的效果。
十二、删除有数据的目录:
rmtree():删除有数据的目录,相当于直接清空该目录下的所有子目录和文件,再顺便删除该目录。
十三、文件模块扩展:
1. zipfile():直接对文件进行压缩与解压操作。
2. 编码:
(1) utf-8 编码能够解很多数潜在的编码BUG。
(2) utf-8 字母大小写都可以。
(3) utf-8 中有个 BOM 文件,当发现 utf-8 无法解决编码问题时,设置为 utf-8-sig 尝试解决。