import time
def main():
fs = open('hello.txt', 'r', encoding='utf-8') # 把‘r’换成‘w’就是写文件
# 表示打开当前路径下文件‘hello.txt’
# content = fs.read()
# print(content)
# for line in fs: # 一次读一行
# print(line, end = '')
# time.sleep(0.5)
mylist = fs.readlines()
print(mylist)
fs.close()
# 写文件
# fs.write('弹木吉他抒情一些\n')
# fs.write('可回忆骚动一整夜\n')
# fs.write('寒冷却下不了雪\n')
# 用with读取文件,如果在with下出现错误导致程序崩溃,就会退出,不会影响其他位置的程序
# 输入文件路径也可以,.表示当前路径,..表示上一级路径
with open('./abc/hello.txt', 'r', encoding='utf-8') as fs:
mylist = fs.readlines
for line in mylist:
print(line, end='')
time.sleep(1)
if __name__ == '__main__':
main()
异常机制 - 处理程序在运行过程中出现的意外状况的手段
因为不是所有的问题都能够在写程序调试程序的时候就能发现
import time
def main():
try: # 把要读取的文件放到try里面保护起来,让文件即使读取出现错误也能够继续执行后面的代码
with open('./abc/hello.txt', 'r', encoding='utf-8') as fs:
mylist = fs.readlines()
for line in mylist:
print(line, end='')
time.sleep(1)
except FileNotFoundError: # 捕获文件异常
print('指定的文件无法打开.')
# except IOError:
# pring('读写文件时出现错误.')
# except FileNotFoundError as e:
# print(e) 打印出现错误的文件
# print('指定的文件无法打开')
print('程序执行结束.')
if __name__ == '__main__':
main()
把1-100,101-1000,1001-10000的素数分别放入三个文件夹
from math import sqrt
def is_prime(n):
assert n > 0 # 检查n是否是有效数,无效则程序报异常不执行
for factor in range(2, int(sqrt(n)) + 1):
if n % factor == 0:
return False
return True if n != 1 else False
def main():
filenames = ('a.txt', 'b.txt', 'c.txt')
fs_list = []
try: # 我们也可以把可能出状况(在执行时有风险)的代码放到try代码块来执行
for filename in filenames:
fs_list.append(open(filename, 'w', encoding='utf-8'))
for number in range(1, 10000):
if is_prime(number):
if number < 100:
fs_list[0].write(str(number) + '\n')
elif number < 1000:
fs_list[1].write(str(number) + '\n')
else:
fs_list[2].write(str(number) + '\n')
except IOError: # 如果try中出现了状况就通过except来捕获错误(异常)进行对应的处理
print('读写文件发生错误')
except FileNotFoundError: # except可以写多个分别用于处理不同的异常状况
pass
# except BaseException: 处理所有的异常状况
# pass
# else: 如果没有出状况,那么可以把无风险的代码放到else中执行
# for number in range(1, 10000):
# if is_prime(number):
# if number < 100:
# fs_list[0].write(str(number) + '\n')
# elif number < 1000:
# fs_list[1].write(str(number) + '\n')
# else:
# fs_list[2].write(str(number) + '\n')
finally:
# 释放文件资源,不管程序正常还是异常,最后这里的代码一定会执行,保证资源释放
# 所以此处是最好的释放外部资源的位置,因为这里的代码总是会执行
for fs in fs_list:
fs.close
print('操作完成!')
if __name__ == '__main__':
main()