赞
踩
语法:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
# 待打开的文件和.py文件在同一个路径下
file = open('demo.txt')
content = file.read()
print(content)
# file = open('xxx.txt', mode='r')
file = open('demo.txt', encoding='utf-8', mode='r')
print(file.read())
# file.write('hello') 只读方式,不允许写入
# file = open('xxx.txt', mode='w')
file = open('demo.txt', mode='w')
print(file.read()) # 不能读取
# file.write('hehe') # 能写入。如果文件以前有内容,会覆盖
# file = open('demo.txt', mode='a')
# # print(file.read()) # 不能读取
# file.write('hehehe') # 写入不会覆盖内容,而是在最后追加内容
file = open('demo.txt', 'tr')
print(file.read())
file = open('IMG_0120.JPG', mode='rb') # 以二进制只读方式打开
print(file.read())
file.close() # 文件 打开后要关闭
路径表示: 可以使用 \ 有风险 \ 在字符串里是转义字符;
推荐使用 / 而不是 \ 作为路径的分割符
../ ==> 表示返回到上一级文件夹
./ ==> 表示的是当前文件夹,可以省略不写
相对路径:以 ./(可以省略) ../ 或者文件(夹)开始的路径,相对的是当前文件所在的文件夹
绝对路径: 从电脑的盘符开始的路径
file = open('xxx\nnn.txt') # 对 \ 后面的字符进行转义 file = open('xxx\\nnn.txt') # 可以使用两个斜杠 file = open(r'xxx\nnn.txt') # 还可以在字符串前面加 r # 推荐使用 / 而不是 \ 作为路径的分割符 file = open('xxx/nnn.txt') print(file.read()) # ../ ==> 表示返回到上一级文件夹 file = open('../ppp.txt') print(file.read()) # ./ ==> 表示的是当前文件夹,可以省略不写 file = open('./demo.txt') print(file.read()) # 以 ./(可以省略) ../ 或者文件(夹)开始的路径,我们可以称它为相对路径 # 相对的是当前文件所在的文件夹 # 绝对路径: 从电脑的盘符开始的路径 file = open(r'C:\Users\chris\Desktop\Day09\demo.txt') print(file.read()) # 绝对路径!!!! file = open('/demo.txt') print(file.read())
# demo.txt文件写入时的编码格式是utf-8,读取时也只能使用utf-8读取
file = open('demo.txt', encoding='utf-8')
print(file.read())
# test.txt 文件写入时的编码格式是GBK,读取时也只能用GBK读取
# file = open('test.txt', encoding='GBK') # 在Windows系统里,代码默认就是使用GBK读取文件的
file = open('test.txt')
print(file.read())
import chardet
file = open(r'C:\Users\ZhangYunyun\cabits_labeling.log.2021-07-23.txt', 'rb')
data = file.read()
print(chardet.detect(data))
结果:{'encoding': 'GB2312', 'confidence': 0.99, 'language': 'Chinese'}
# 1、打开一个文件以后,需要根据打开的模式判断是否有读取或者写入权限
file = open('demo.txt', 'r', encoding='utf-8')
print(file.read(3)) # read可以指定读取的字符长度
file.close()
# 2、以二进制形式读取
file2 = open('IMG_0120.JPG', 'rb')
content = file2.read(1024) # 如果是以二进制的形式读取,单位是字节
file2.close()
demo = open('IMG.jpg', 'wb')
demo.write(content) # 以二进制形式写入,该图片大小为1024字节,即1KB
demo.close()
file = open('big.file.mp4', 'rb')
while True:
content = file.read(1024)
if not content:
break
print(content)
file.close()
file = open('demo.txt', 'r', encoding='utf-8')
print(file.readline()) # 打印文件中的第一行数据
lines = file.readlines() # 返回的是一个列表,即lines是一个列表,包括文件中的所有行数据
for line in lines:
print(line, end='')
file.close()
file = open('test.txt', 'wb') # 以二进制形式写入
file.write(b'hello') # 可以成功写入,b支持ASCII码表里的数据
# file.write(b'你好') # 写入失败,不能直接把中文转换成二进制
file.write('你好'.encode(encoding='utf-8')) # 写入成功
file.close()
字符串、二进制转:
字符串转换成二进制,使用encode;
二进制转换成字符串,使用decode
print('你'.encode(encoding='utf-8'))
print(b'\xe4\xbd\xa0'.decode(encoding='utf-8'))
print('你'.encode(encoding='gbk'))
print(b'\xc4\xe3'.decode(encoding='gbk'))
可以先搭好框架:源文件二进制读、目标文件二进制写、关闭文件;
中间处理操作:名称分割
# 1、文件备份 file_name = input('请输入您要备份的文件名:') # file_name = 'big.file.mp4' # 需要复制的源文件 source_file = open(file_name, 'rb') # 都以二进制都形式进行读写 # big.file.mp4 ==>big.file.bak.mp4,,,,源文件名称中有一个或多个. 备份文件名称想命名格式为:在后缀前加一个字符串 # names = file_name.split('.') # ['big','file','mp4'] names = file_name.rsplit('.', maxsplit=1) # ['big.file','mp4'] # print(names) # ['big.file','mp4'] new_file_name = names[0] + '.bak.' + names[1] # 备份的文件名称, # 复制到的目标文件 dist_file = open(new_file_name, 'wb') while True: content = source_file.read(1024) # 分片写入,以防文件过大写入困难 dist_file.write(content) if not content: break dist_file.close() source_file.close()
# 2、文件备份优化 while True: file_name = input('请输入您要备份的文件名:') try: source_file = open(file_name, 'rb') # break except FileNotFoundError: print('对不起,您输入的文件不存在!请重新输入:') # 然后做一个死循环(while),文件名称错误时,一直从新输入 else: break names = file_name.rsplit('.', maxsplit=1) new_file_name = names[0] + '.bak.' + names[1] dist_file = open(new_file_name, 'wb') while True: content = source_file.read(1024) dist_file.write(content) if not content: break dist_file.close() source_file.close()
在程序运行的过程中,由于编码不够严谨或者一些无法避免的现象,程序可能会出错
在python里可以使用异常处理机制来解决程序运行过程中的异常
try except else
num1 = float(input('请输入一个数字除数:'))
num2 = float(input('请再输入一个数字被除数:'))
if num2 == 0:
print('除数不能为0')
else:
print('您输入的两个数字相除的结果是%.2f' % (num1 / num2))
p = {'name': 'zhagsan'} num1 = input('请输入一个数字:') num2 = input('请再输入一个数字:') try: num1 = float(num1) num2 = float(num2) print('yes!!!!!!') # 程序一旦出问题,便会直接跳出try至except中,不会执行下面的语句,只有正常执行时才会打印该语句 # print(p['age']) # 执行至该语句时,程序出错,会直接跳出try,执行except print(num1 / num2) # except ValueError: # 只捕获指定异常 # print('输入的不是数字!') # except ZeroDivisionError: # print('除数不能为0!') # except (ValueError, ZeroDivisionError): # print('程序出错了!!!') except: print('程序出错了!!!')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。