Python12 文件操作
文件操作
Pycharm使用UTF-8格式,而Windows默认是GBK格式,所以默认pycharm是处理不了BGK格式的,所以要要定义使用UTF-8格式打开Windows文件的内容。
.read():读取文件所有内容。
同样是读取文件内容,但是print(data2)时没有任何数据显示,这是因为data1读取完成的时候,光标位置处于test.txt文档中的最下面,所以当data2再去读取时,下面已经没有数据了。
1.读写
报错没有写入的权限。
使用’r’赋予只读权限,不写的话默认就是只读。
因为是只读所以不能写入
将其赋予写入权限
可以看到只能写入,却不能读取(代码中有读取的动作)。
可以看到test文档已经被写入内容了,但是内容却都写在了同一行。
\n表示换行符
f.close(),写入内容后需要关闭文档,关闭后自动保存。
注意’w’权限会覆盖之前有的内容。
可以看到文档中直接了内容,并不会覆盖。
每一行定义一个数字
读取了多行的内容,但是这样写的代码太多,可以使用循环替代重复代码
2.readlines
可以看到以列表的形式,将每一行的列表元素在同一行打印出来。
将列表的每一个元素分行打印出来,但是可以看到打印的时候将\n也打印出来了,所以显示的时候会有空行。
可以看到,通过strip分隔了空行(也就是删除,因为括号中是空格所以删除所有空格,如果是其他字符就删除对应的所有字符),显示就正常了。
- readlines的缺点
Readlines会读取文件的所有内容,并将读取的内容放入到内存中,读取的文件小的话内存是可以接受的,但是如果读取的文件过大,超过了内存的大小就不可以了(比如内存8G,你的文件有20G)。
解决方法就是直接使用for循环就可以了
这种方式就是读取一行后,打印一行,在打印下一行前会把之前打印的内容在内存中删除,这样内存中就始终保存一行的内容,不会占据过大内存。
内存只保存一行是因为f打开的文件编程了一个叫迭代器的东西,迭代器后面会讲。
不使用readlines读取,显示的内容就不在会是列表了,也就无法将文档中的下标读取出来了,就没办法在通过匹配下标的方式去针对达到指定行进行操作了。
可以通过使用计数器来判断读取文档到多少行了。
### 3.文件修改
F_1是旧文件
F_2是新文件
要求:通过读取旧文件的指定内容,将其修改并写入新的文件中;如果没有读取到指定内容,也将新内容写入到新文件中。
代码含义:如果发现小明要去玩内容在文件中,就通过replace替换关键字;如果没有发现指定内容,根据else代码直接写入新文件中。
但是此代码中可以看到,出现了重复代码f_2.write(line)
只需要将缩进等级调整一下,如果发现指定内容就进行替换,之后会将替换内容写入到新文件。
即使没有发现指定内容,那么就不需要他换,直接将循环到旧文件的内容写入到新文件。
也可以将要查找和替换的信息赋值变量,然后用变量名称来代替。
4.with语句
使用with语句可以在该语句模块最后不适用close来关闭文件,因为with语句最后会自动关闭;
这里的as f,相当于f = open…….
可以通过with同时打开多个文件;
从代码中可以看出是分了多行来打开多个文件,其实也可以在同一行来打开,只不过python官网的开发规范说明了一行的开发代码不应该超过80个字符,当同时打开多个文件时,可能就超过了限制的80个字符,所以这里我们没打开一个文件就换一行来写代码。
总结
r只读
w只写(覆盖)
a追加(最后一行)
r+读写(读后可以写,如果是写就是追加到最后一行)
w+写读(覆盖后可以读)
a+追加写读
rb使用二进制模式打开(打开的数据都是bytes格式)
wb通过bytes的格式写入,如果使用过wb必须制定字符集(如:encoding='utf-8'),当夸系统平台时会用到二进制数据。
ab用二进制追加
seek:重置读取的下标位置到最顶
tell:查看当前下标的位置
truncate():截断剩下的字符串(剩下也就是还没读取的),默认截断后面所有,括号中指定数字就是指定多少个字符。
flush():一般文件需要关闭后才换刷新缓冲区将内容写入文件,但是用flush后不需要等文件关闭,直接指定缓冲,将内容写入文件
文件还有很多其他方法:
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341