编码格式
文件的读写原理
'''
文件的读写俗称“IO操作”,即 input 和 output
文件读写操作流程
打开或新建文件
读写文件
关闭资源
操作原理
解释器运行 .py 文件,调用操作系统资源,用于操作硬盘上的数据
''''''
文件的读操作
'''
原理
程序中的文件对象映射磁盘上的真实文件
通过 IO 流将磁盘文件的内容与程序中文件对象的内容进行同步
语法
file = open(filename[, mode, encoding])
file:被创建的文件对象
open:创建文件对象所需函数
filename:要创建或打开的文件名称
mode:打开模式默认为只读
encoding:默认文本文件中字符的编写格式为gbk
'''
file = open('test.txt', 'r')
print(file.readlines())
file.close()
文件的打开模式
'''
按照文件中数据的组织形式,文件分为以下两类:
文本文件:存储普通“字符”文本,默认为 unicode 字符集,可以使用记事本打开
二进制文件:把数据内容用“字节”进行存储,无法使用记事本打开,必须借助特定软件打开
如:MP3音频、MP4多媒体、jpg图片、doc文档
打开模式
r:以只读模式打开文件,文件指针将会放在文件的开头
w:以只写模式打开文件,若文件不存在则创建,若文件存在,则覆盖原有内容,文件指针在文件的开头
a:以追加模式打开文件,若文件不存在则创建,文件指针在文件开头;若文件存在,则在文件末尾追加内容,
文件指针在原文件的末尾
b:以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,如 rb 或 wb
+:以读写方式打开文件,不能单独使用,需要与其他模式一起使用,如 +a
'''
file = open('test1.txt', 'w')
file.write('helloWorld')
file.close()
file = open('test1.txt', 'a')
file.write('hello')
file.close()
src_file = open('logo.png', 'rb')
target_file = open('copyLogo.png', 'wb')
target_file.write(src_file.read())
target_file.close()
src_file.close()
文件对象的常用方法
'''
read([size]) 从文件中读取 size 个字节或字符的内容返回。
若省略[size],则一直读取到文件末尾,即一次读取文件所有内容
'''
file = open('test.txt', 'r')
print(file.read(2))
file.close()
'''
readline() 从文件中读取第一行内容
'''
print('---')
file = open('test.txt', 'r')
print(file.readline())
file.close()
'''
readlines() 把文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
'''
print('---')
file = open('test.txt', 'r')
print(file.readlines())
file.close()
'''
write(str) 将字符串 str 内容写入文件
'''
print('---')
file = open('test.txt', 'a')
file.write('hello')
file.close()
'''
writelines(s_list) 将字符串列表 s_list 写入文件,不添加换行符
'''
print('---')
lst = ['java', 'go', 'python']
file = open('test.txt', 'a')
file.writelines(lst)
file.close()
'''
seek(offset[,whence]) 把文件指针移动到新位置,offset 表示相对于 whence 的位置
offset:值为正,则往结束方向移动;值为负,则往开始方向移动
whence:值为0,表示从文件头开始计算(一般默认为0)
值为1,表示从当前位置开始计算
值为2,表示从文件尾开始计算
'''
print('---')
file = open('test.txt', 'r')
file.seek(4)
print(file.read())
file.close()
'''
tell() 返回文件指针的当前位置
'''
print('---')
file = open('test.txt', 'r')
file.seek(4)
print(file.read())
print(file.tell())
file.close()
'''
flush() 把缓存区的内容写入文件,但不关闭文件
'''
file = open('test.txt', 'a')
file.write('hi')
file.flush()
file.write('Jenny')
file.close()
'''
close() 把缓存区的内容写入文件,同时关闭文件,释放文件对象相关资源
'''
with 语句(上下文管理器)
'''
with 语句可以自动管理上下文资源,无论什么原因跳出 with 块,都能确保文件正确地关闭,以此来达到释放资源的目的
with 语句相当于之前的文件操作的三句话:以特定模式打开文件、执行操作、关闭文件
with语句常用于对文件的操作中
'''
with open('test.txt', 'r') as file:
print(file.read())
'''
MyContentMgr 实现了特殊方法 __enter__(),__exit__(),则该类对象遵守了上下文管理器协议
该类对象的实例对象,被称为上下文管理器
上下文管理器中,无论是否报错,都会执行特殊方法 __enter__(),__exit__()
'''
class MyContentMgr(object):
def __enter__(self):
print('enter 方法被调用了')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit 方法被调用了')
def show(self):
print('show 方法被调用了')
with MyContentMgr() as file:
file.show()
with open('logo.png', 'rb') as src_file:
with open('copy2Logo.png', 'wb') as target_file:
target_file.write(src_file.read())
os 模块的常用函数
'''
os 模块是 python 内置的与操作系统功能和文件系统相关的模块
该模块中的语句的执行结果通常与操作系统有关,故在不同的操作系统上运行,得到的结果可能不一样
os 模块与 os.path 模块用于对目录或文件进行操作
'''
import os
print(os.getcwd())
lst = os.listdir('../code')
print(lst)
print('---')
os.chdir('D:\\001_编程\\python编程\\study\\test1')
print(os.getcwd())
os.path 模块的常用方法
import os.path
print(os.path.abspath('demo.py'))
print(os.path.exists('demo.py'))
print(os.path.join('D:\\MyPython', 'MyDemo.py'))
print(os.path.split('D:\\001_编程\\python编程\\study\\test1\\code\\demo.py'))
print(os.path.splitext('demo.py'))
print(os.path.basename('D:\\001_编程\\python编程\\study\\test1\\code\\demo.py'))
print(os.path.dirname('D:\\001_编程\\python编程\\study\\test1\\code\\demo.py'))
print(os.path.isdir('D:\\001_编程\\python编程\\study\\test1\\code'))
print(os.path.isdir('D:\\001_编程\\python编程\\study\\test1\\code\\demo.py'))
实例
import os
path = os.getcwd()
lst = os.listdir(path)
for filename in lst:
if filename.endswith('.py'):
print(filename, end = ' ')
path = os.getcwd()
lst_files = os.walk(path)
print(lst_files)
for dirpath, dirname, filename in lst_files:
print(dirpath)
print(dirname)
print(filename)
print('---')
for dir in dirname:
print(os.path.join(dirpath, dir))
for file in filename:
print(os.path.join(dirpath, file))
|