文章目录
一、读写文本文件
1.read
例子:
def main():
f = open('致橡树.txt', 'r', encoding='utf-8')
print(f.read())
f.close()
if __name__ == '__main__':
main()
这里没有致橡树.txt
文件,所以报错。
指定encoding的目的是:不指定的话默认值是None,这样读取文件时使用的是操作系统默认的编码
将代码重构一下
def main():
# f = None
try:
f = open('致橡树1.txt', 'r', encoding='utf-8')
print(f.read())
except FileNotFoundError:
print('无法打开指定文件!')
except LookupError:
print('指定了未知的编码!')
except UnicodeDecodeError:
print('读取文件时解码错误!')
# finally: # 用来关闭打开的文件,释放掉程序中获取的外部资源
# if f:
# f.close()
if __name__ == '__main__':
main()
使用try: except: 来判断文件一系列的错误
except FileNotFoundError:
在找不到文件时输出’无法打开指定文件!’
2.for-in
例子:
import time
def main():
# 一次性读取整个文件内容
with open('致橡树.txt', 'r', encoding='utf-8') as f:
print(f.read())
# 通过for-in虚幻逐行读取
with open('致橡树.txt',mode='r', encoding='utf-8') as f:
for line in f:
print(line,end='')
time.sleep(0.5)
print()
# 读取文件按行读取到列表中
with open('致橡树.txt', encoding='utf-8') as f:
lines =f.readlines()
print(lines)
if __name__ == '__main__':
main()
3.将1~99之间的素数写入a.txt 100~999之间的素数写入b.txt 1000~9999之间的素数写入c.txt
from math import sqrt
def is_prime(n):
"""判断素数的函数"""
assert n > 0
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:
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 as ex:
print(ex)
print('ٟ写文件时发生错误!')
finally:
for fs in fs_list:
fs.close()
print('操作完成!')
if __name__ == '__main__':
main()
这时a.txt、b.txt、c.txt会自动创建,且里面的内容符合要求。
二、读写二进制文件
1.复制图片文件
def main():
try:
with open('bizhi2.jpg', 'rb') as fs1:
data = fs1.read()
print(type(data)) # <class 'bytes'>
# 复制图片
with open('tupian1.jpg', 'wb') as fs2:
fs2.write(data)
except FileNotFoundError as e:
print('指定文件无法打开.')
except IOError as e:
print('读写文件时出现错误.')
print('程序执行结束.')
if __name__ == '__main__':
main()
结果
若没有tupian1.jpg文件会自动创建,
若已存在tupian1.jpg文件则会覆盖该文件内容