# 1、打开文件

# 创建一个变量来保存文件的名字,首先需要知道文件的路径
# 文件的路径问题:
# (1)如果目标文件和当前文件在同一级目录下,则直接使用文件名即可
file_name1 = 'demo.txt'
# (2)不在同级目录表示路径,可以使用..来返回一级目录
file_name2 = r'..\hello\demo.txt' # r表示原始字符串
# (3)目标较远,使用绝对路径
file_name3 = r"C:\Users\Administrator\Desktop\A Brief History Of Time.txt"

# 使用open函数来打开一个文件
# 参数:
#   file 要打开的文件的名字(路径)
# 返回值:
#   返回一个对象,这个对象就代表了当前打开的文件
# —— open()打开的文件可以分成两种类型:
# —— 一种是纯文本文件(使用utf-8编码编写的文件)
# —— 一种是二进制文件(图片、PPT、MP3等),'rb'
# —— open()打开文件时,默认以文本文件形式打开,默认编码为:None
# —— 所以处理文本文件,必须指定文件的编码

file_obj1 = open(file_name1) # file_obj1用来接收返回的对象

# 2、操作文件
# -获取文件对象后,对于文件的操作都是通过对象来进行

# (1)读取文件内容
# -read()方法,用于读取文件内容
content = file_obj1.read()
print(content)
# ======================================
# today is sunday!
# ======================================

# (2)读取大文件
try:
	with open(file_name3,encoding='utf-8') as file_obj3:
		# 定义一个变量来保存文件内容
		file_content3 = ''
		# 定义一个变量,来指定每次读取的大小
		chunk = 100
		# 创建一个循环来读取文件内容
		while True:
			content3 = file_obj3.read(chunk)
			# 检查是否读完,读完则停止
			if not content3:
				break
			# 存储读取的内容			
			file_content3 = file_content3+content3

except FileNotFoundError:
	printf(f'{file_name3}这个文件不存在!')

print(file_content3)
# ======================================
# ——《时间简史》是英国物理学家斯蒂芬·威廉·霍金创作的科普著作,首次出版于1988年。
# ——全书共十二章,讲述了关于宇宙本性的最前沿知识,包括:我们的宇宙图像、空间和时间、膨胀的宇宙、不确定性原理、黑洞、宇宙的起源和命运等内容,深入浅出地介绍了遥远星系、黑洞、粒子、反物质等知识,并对宇宙的起源、空间和时间以及相对论等古老命题进行了阐述。 [1]
# ——在该书里,霍金探究了已有宇宙理论中存在的未解决的冲突,并指出了把量子力学、热动力学和广义相对论统一起来存在的问题,该书的定位是让那些对宇宙学有兴趣的普通读者了解他的理论和其中的数学原理。 [2]
# ——该书自1988年首版以来,已被翻译成40种文字,累计销售量突破2500万册,成为一本畅销全世界的科学著作。 [1]
# ======================================

# (3)写入文件
# write()用来向文件中写入内容
# 使用open()打开文件时必须要指定打开文件所要做的操作(读、写、追加)
# 如果不指定操作类型,则默认是 读取文件 , 而读取文件时是不能向文件中写入的
# r 表示只读的
# w 表示是可写的,使用w来写入文件时,如果文件不存在会创建文件,如果文件存在则会截断文件
#   截断文件指删除原来文件中的所有内容
# a 表示追加内容,如果文件不存在会创建文件,如果文件存在则会向文件中追加内容
# x 用来新建文件,如果文件不存在则创建,存在则报错
# + 为操作符增加功能
#   r+ 即可读又可写,文件不存在会报错
#   w+
#   a+
with open(file_name1,'a',encoding='utf-8') as file_obj1:
	file_obj1.write('It is a good day!')


# 3、关闭文件
# -(1)调用close()方法来关闭文件
file_obj1.close()

# -(2)调用with ... as 语句,文件的读取、关闭都在此函数中进行
with open(file_name1) as file_obj1:
	content1 = file_obj1.read()
	print(content1)
# ======================================
# Today is sunday!It is a good day!
# ======================================

with open(file_name2,encoding='utf-8') as file_obj2: #读取中文
	content2 = file_obj2.read()
	print(content2)
# ======================================
# 今天是周日!
# ======================================