读文本文件
读文本文件
引题:PS、word 读写修改文件;美图秀秀把自己的照片美白加装饰;微博上传本地图片;QQ上传表情图;管理系统上传Excel批量导入信息。读文件就是把内容读出来,写文件就是把信息写在硬盘上。
python也可以读写文件。自动化和批量化,比如Excel批量导入信息,比如修改图片元信息,比如批量保存头像,软件站自动下载软件。本质上也是代码对本地资源的读写。更高效,更自动化对文件进行编程,代替人工。
本地:你自己用的电脑,客户端,本地资源:固态硬盘 C/D盘上的资源
纯文本文件(.txt文件形式):可以直接被计算机翻译并保存并存储到硬盘上,只包含文字。没有特殊的效果格式。适合刚开始的读写研究。
read()(适用于文件(English_ascii.txt)内容为英文)
读文件的流程:建立到文件的映射,生成文件对象 > 文件对象.读取文件信息 > 信息处理 > 关闭文件对象。
IO:input output 输入和输出,input() print()。
open:open(文件路径/文件名,模式)。
'r’模式,代表read,读文件
方法:文件对象.read() 读文件信息。
file.close() 关闭文件,释放内存。
file = open('English_ascii.txt','r') # 文件名是一个信息,所以用单引号引住。 用一个变量去打开文件
content = file.read() # 用一个变量去接收文件的信息
print(content) # 打印出文件信息
file.close() # 关闭文件
在.py文件的当前文件夹下创建一个English_ascii.txt文件
file.read() 一次性全部读取信息到内存中。缺点,当文件内容较大时,这个过程好费时间。
readline()
file.readline():生成器结构一次只读取一行。生成器结构。优点是:不占内存空间,速度快。缺点:不能再次从file对象读取信息。
file = open('English_ascii.txt','r') # 文件名是一个信息,所以用单引号引住。 用一个变量去打开文件
content = file.readline() # 用一个变量去接收文件的信息 输出内容的第一行
print(content) # 打印出文件信息
content = file.readline() # 用一个变量去接收文件的信息 输出内容的第二行
print(content) # 打印出文件信息
content = file.readline() # 用一个变量去接收文件的信息 输出内容的第三行
print(content) # 打印出文件信息
file.close() # 关闭文件
file = open('English_ascii.txt','r')
while True:
content = file.readline() # 用一个变量去接收文件的信息 输出内容的第二行
print(content)
if content == '': # 当文件内容较少时可以用此方法
break
file.close()
readlines()
file.readlines():一次性全部读取,跟read()不同是,返回的为一个列表,每一项是一行信息,优点是:获得列表后更方便操作。
\n相当于告诉计算机表示换行,代表转义字符
file = open('English_ascii.txt','r')
content = file.readlines()
print(type(content))
print(content)
for line in content:
print(line)
字符编码
引题:在windows资源管理器中新建 含有中文的txt文件,windows上的文件应用正常打开,但是pycharm中打开中文乱码
file = open('chinese_gbk.txt','r',encoding='gbk')
print(file.readline())
print(file.readline())
print(file.readline())
print(file.readline())
print(file.readline())
open():arg1文件名,arg2模式,encoding 编码。
encoding参数如果没有写,默认随系统,windows系统默认编码为gbk,linux、mac系统上的默认编码为utf-8。
捕获异常版
try:
file = open('Chinese_utf8.txt', 'r', encoding='utf-8')
lines = file.readlines()
print(lines)
for line in lines:
print(line)
except FileExistsError:
print('请检查路径和文件名')
except UnicodeDecodeError:
print('检查编码方式是否正确')
except Exception as e:
print(e)
finally:
file.close()
注意:这里用的编码是utf8,上面用到的编码是gbk。chinese_gbk.txt保存的文件格式是默认ANSI,Chinese_utf8.txt保存的文件格式是utf8,如果保存的utf8格式用编码gbk会出现乱码情况,所以这里用到的是编码utf8,也是为了和文件格式保持一致。
with语句
with:with语句要求后面跟的对象实现 进入方法__enter__() 退出__exit__() with语句执行时,这两种方法会自动执行。
as:把 … 当做 … 类似于等号。
场景:一项任务有固定的预处理和退出处理,把这些任务的实现代码封装到__enter__() exit()中,这样在with语句块中只用写主要的业务逻辑。为做项目节省更多时间,代码更加清晰。
with open('Chinese_utf8.txt','r',encoding='utf8') as file:
# file.__enter__() # with语句默认执行了enter语句,文件打开的预处理
content = file.read()
print(content)
# file.__exit__() # 对象结束后的操作,例如f.close() 也是with语句最后默认执行的