python3笔记十七:python文件读写
<p><strong>一:学习内容</strong></p><ul>
<li>读文件</li>
<li>写文件</li>
<li>编码与解码</li>
</ul>
<p> </p>
<p><strong>二:读文件--步骤分解<br></strong></p>
<p>1.过程</p>
<p>第一步:打开文件<br>第二步:读文件内容<br>第三步:关闭文件</p>
<p> </p>
<p>2.第一步:打开文件</p>
<p>open(path,flag[,encoding][,errors])</p>
<p>参数说明:<br>path:要打开文件的路径<br>flag:打开方式(<br>r:以只读的方式打开文件,文件的描述符放在文件开头<br>rb:以二进制格式只读的方式打开文件,文件的描述符放在文件开头<br>r+:打开一个文件用于读写,文件描述符放在文件的开头<br>w:打开一个文件只用于写入,文件的描述符放在文件的开头,如果该文件已经存在会覆盖,如果不存在则创建新文件<br>wb:打开一个文件只用于写入二进制,如果该文件会覆盖,如果该文件不存在新创建文件<br>w+:打开一个文件用于读写,如果该文件存在会覆盖,如果该文件不存在新创建文件<br>a:打开一个文件用于追加,如果文件存在文件描述符将会被放到文件末尾<br>a+:打开一个文件用于追加<br>encoding:编码方式<br>errors:错误处理</p>
<p> </p>
<p>path = r"F:\python_test\read_practice.txt"<br>#f = open(path,"r",encoding="utf-8",errors="ignore") #ignore 忽略错误<br>f = open(path,"r",encoding="utf-8")</p>
<p> </p>
<p>3.第二步:读文件内容</p>
<p>#法1、读取文件全部内容,适合读文件比较小的<br>str1 = f.read()<br>print(str1)<br><br>#法2、读取指定字符数<br>str2 = f.read(10) #读取文件10个字符,1个中文是1个字符<br>print(str2)<br>str3 = f.read(10) #继续上一次读取结束的位置继续读取<br>print(str3)<br><br>#法3、读取整行包括"\n"字符<br>str4 = f.readline()<br>print(str4)<br>str5 = f.readline() #继续下一行读取<br>print(str5)<br><br>#法4、读取指定字符数<br>str6 = f.readline(10)<br>print(str6)<br><br>#法5、读取所有行包括"\n"字符并返回列表<br>list7 = f.readlines()<br>print(list7)<br><br>#法6、若给定的数字大于0,返回实际size字符的行数<br>list7 = f.readlines(25)<br>print(list7)<br><br>#修改文件描述符位置<br>f.seek(0)<br>str9 = f.read()<br>print(str9)</p>
<p> </p>
<p>4.第三步:关闭文件</p>
<p>f.close()</p>
<p> </p>
<p><strong>三:读文件--完整过程<br></strong></p>
<p>1.法一<br>try:<br> f1 = open(path,"r",encoding="utf-8")<br> print(f1.read())<br>finally:<br> if f1: #打开失败时f1对象还未创建就不用关闭了<br> f1.close()</p>
<p> </p>
<p>2.法二,最简洁的写法,不用自己手动去close了</p>
<p>with open(path,"r",encoding="utf-8") as f2:<br> print(f2.read())</p>
<p><img src="https://img2018.cnblogs.com/blog/675608/201909/675608-20190911114006120-1218622792.png"></p>
<p> </p>
<p><strong>四:写文件--步骤分解<br></strong></p>
<p>1.过程</p>
<p>第一步:打开文件<br>第二步:写文件内容<br>第三步:关闭文件</p>
<p> </p>
<p>2.刷新缓冲区两种方式</p>
<p>自动刷新 f.close()<br>手动刷新 f.flush()</p>
<p> </p>
<p>3.第一步:打开文件</p>
<p>path = r"F:\python_test\write_practice.txt"<br>f = open(path,"w",encoding="utf-8")</p>
<p> </p>
<p>4.第二步:写文件</p>
<p>#将信息写入缓冲区<br>f.write("tester is a good girl")</p>
<p><br>#刷新缓冲区,就能写入文件<br>#直接把缓冲区的数据立刻写入文件,如果没有写刷新缓冲区则会在关闭文件时在把缓冲区写入文件<br>f.flush()</p>
<p> </p>
<p>5.第三步:关闭文件</p>
<p>f.close()<br><br></p>
<p><strong>五:写文件--完整过程<br></strong></p>
<p>1.法一<br>try:<br> f1 = open(path,"w",encoding="utf-8")<br> f1.write("good girl")<br>finally:<br> if f1: #打开失败时f1对象还未创建就不用关闭了<br> f1.close()</p>
<p> </p>
<p>2.法二-覆盖写入,简洁的写法,不用自己手动去close了</p>
<p>with open(path,"w",encoding="utf-8") as f2:<br> f2.write("good girl")</p>
<p> </p>
<p>3.法三-追加写入,简洁的写法,不用自己手动去close了</p>
<p>with open(path,"a",encoding="utf-8") as f3:<br> f3.write("young girl")</p>
<p> </p>
<p>执行完法二和法三的结果:文件被写入内容</p>
<p><img src="https://img2018.cnblogs.com/blog/675608/201909/675608-20190911115135086-1084236740.png"></p>
<p> </p>
<p><strong>六:编码与解码<br></strong></p>
<p>
1.说明</p>
<p>不是二进制时:<br>文件打开的编码要一致,即写文件和读文件open中的encoding要一致</p>
<p><br>二进制文件时:<br>文件写入读取的编码要一致</p>
<p> </p>
<p>2.不是二进制文件读写操作</p>
<p>path = r"F:\python_test\encode_file.txt"<br><br>with open(path,"<span style="color: rgba(255, 0, 0, 1)">w</span>",<span style="color: rgba(255, 0, 0, 1)">encoding="utf-8"</span>) as f1:<br> str = "tester is a good girl测试"<br> f1.write(str)<br><br>with open(path,"<span style="color: rgba(255, 0, 0, 1)">r</span>",<span style="color: rgba(255, 0, 0, 1)">encoding="utf-8"</span>) as f2:<br> data = f2.read()<br> print(data)<br> print(type(data))</p>
<p><img src="https://img2018.cnblogs.com/blog/675608/201909/675608-20190911140400572-1581153093.png"></p>
<p> </p>
<p>3.二进制文件读写</p>
<p>path = r"F:\python_test\encode_file.txt"<br><br>#with open(path,"wb",encoding="utf-8") ,当方式里有b时,不能有encoding参数,否则会报错binary mode doesn't take an encoding argument<br>with open(path,"<span style="color: rgba(255, 0, 0, 1)">wb</span>") as f1:<br> str = "tester is a good girl测试"<br> f1.write(str.<span style="color: rgba(255, 0, 0, 1)">encode("utf-8")</span>)<br><br>with open(path,"<span style="color: rgba(255, 0, 0, 1)">rb</span>") as f2:<br> data = f2.read()<br> print(data)<br> print(type(data))<br> newData = data.<span style="color: rgba(255, 0, 0, 1)">decode("utf-8")</span><br> print(newData)<br> print(type(newData))</p>
<p><img src="https://img2018.cnblogs.com/blog/675608/201909/675608-20190911140510233-2104694222.png"></p><br><br>
来源:https://www.cnblogs.com/miaomiaokaixin/p/11505949.html
頁:
[1]