一, 比如有一个文件, 正常情况下, 如何查看内容呢:
1, 安装文件编辑器软件 (如 Word 文件需安装 Office)
2, 选中文件, 双击或者右键, 用文本编辑器软件打开
3, 进行入, 删除等操作.
二, 用 python 进行文件操作:
文件操作分为读, 写, 改.
1, 读文件:
- f=open(file="D:/ 工作 / 资料. txt",mode="r,encodind="utf-8) #相当于把文件打开, r 表示以只读模式打开, 以 utf-8 编码打开
- data=f.read() #读取文比赋予 data 这个变量
- f.close() #关闭文件师范内存.
rb: 表示以二进制模式打开, 那后面就不能加 encoding 语句了, 否则报错.
如果不知道某段字符的编码格式, 可以导入 chardet 库来判断:
2, 写文件:
1循环文件内容:
显示结果为:
默认每循环一次, 取一行, 且每行之间有空行.(因为用 print 输出时, print 本身带有一层换行符)
2写文件语法:
- g=open(file="f:/download/222.txt",mode="w",encoding="GB2312")
- f.write(" 伟明环保, 603568 15.26)
- f.close()
3mode=w 模式表明是创建新文件, 如果文件已经存在, 则会清空已有内容, 然后写入新的内容.
4如果 mode=wb, 表明是以二进制类型输入内容, 则需要把字符编码成二进制:
- g=open(file="f:/download/222.txt",mode="wb")
- g.write("伟明环保, 603568 15.26".encode("gbk"))
5如果 mode=a, 那就是追加模式.:g=open(file="f:/download/222.txt",mode="a")
6, 读写模式: mode=r + 或者 a+
7写读模式: mode=w + 先写后读, 会吧之前的内容先清空, 然后写入新的内容. 此模式应用很少.
在第一次读取文件时, 读取完后, 光标处于文件最后, 如果再次读取的话, 读取内容为空. 此时需要移动光标.
f.seek(0) 表明吧光标移到初始位置.
seek 和 tell 都是一个字节算一个位置, read 和 readline 按一个字符算一个位置.
三, 修改文件
如果用 seek() 移动光标然后写入内容的方式来修改文件的话, 新加入的内容会自动覆盖源文件里对应的位置. 比如:
- p=open("pw.txt","r+",encoding="gbk")
- p.seek(2)
- p.write("VVV")
- p.close()
- f=open("pw.txt","r",)
- print(f.read())
以上这段代码写入的 "VVV" 会自动覆盖源文件里从第 2 个光标开始后的 3 个字节.
如果要用 PYTHON 修改文件, 只能一行一行循环旧文件, 碰到需要修改的行就修改, 然后添加到新的文件, 不需要修改的也直接添加到新文件.
如 1,(占硬盘的修改方式, 不先 read 文件到内存, 直接在硬盘层面操作文件)
- f=open(r"F:\python\2019.6.2\xuexi\6.2\ty","r",encoding="gbk")
- for line in f:
- if "e"in line:
- line=line.replace("e","9")
- f_new.write(line)
- f.close()
- f_new.close()
- f_new=open("cxp1.txt","r",encoding="gbk")
- print(f_new.read())
如 2,(占内存的修改方式, 先把原文件 read 到内存):
- f=open(r"F:\python\2019.6.2\xuexi\6.2\ty","r+",encoding="gbk")
- data=f.read()
- f.seek(0)
- data_new=data.replace("e","8")
- f.write(data_new)
- f.close()
新知识点: os 模块:
import os
os.rename(f.name,f_new_name): 把文件名为 f._new_name 的文件名称替换为 f.name, 同时删除 f.name 文件. f._new_name 内容不会改变.
来源: http://www.bubuko.com/infodetail-3094997.html