1.三元运算
又称三目运算,是对简单的条件语句的简写
if 条件成立: value = 1 else: value = 2 # 改写为三元运算 value = 1 if 条件成立 else 2
2.文件的读操作
f = open(file="filename",mode ="r",encoding="utf-8") #相当于打开文本编辑器 data = f.read() # 读取,并把内容存于data这个变量中 f.close() # 关闭
注意:encoding = ''" 这一项如果不写,默认为utf-8。文件中字符的编码格式应于读到内存中的编码格式相同.
3. 以二进制模式打开一个文本
当读取一个图片,视频或进行网络传输文本时,要以二进制模式读取一个文件
f = open(file='filename',mode='rb')
mode = 'rb', 没有encoding= 这一项
4. 循环方式读取文件内容
f = open('text2.txt','r',encoding='utf-8') for line in f: print(line) # print自带一个换行, 所以有两个换行
结果为:
内容line1
内容line2
内容line3
这种方式和read方式的区别:前者一行一行读取到内存,而read是把整个文件加载到内存
5. 写操作
f = open('text2.txt','w',encoding='utf-8') f.write("hello\n") f.write("hello2")
注意: w模式新创建了一个文件,在新创建的文件中进行写操作,所以如果文件名和已存在的文件名相同,则会覆盖掉原来的数据。
写多行时,要注意写/n换行
追加操作
f = open('text2.txt','a',encoding='utf-8')
6. 混合操作
r+ 模式:读写模式。
w+模式:写读模式。先以写模式创建一个新的文件,再进行读或写操作
注意: 两种模式不一样。
注意光标的位置:read()读完之后,光标移至最后,若再进行read(),则不会读取任何内容
7. 其他操作
f.flush() 强制把内存buffer里刷新到硬盘
在关闭文件之前,所修改的数据存在内存,如果写入很重要的数据,应使用flush强制写入硬盘,防止意味发生导致数据丢失。
f.readline() 读一行
f.tell() 返回当前光标位置
f.seek() 把光标移到指定位置
注意:f.read() 和 f.seek() 里传参数。但前者读的是字符,后者读的是字节
f.truncate() 从当前光标位置截断,若传入参数,则表示从开头截断多少位
8. 修改文件
两种方式:占硬盘和占内存
占内存: 和word一样,先把文件内容全部加载到内存,在内存中修改完再保存回硬盘
占硬盘:创建一个新的文件,一行一行读取到内存,改完一行保存回硬盘,再处理下一行。不做修改的行写入新文件,做修改的处理完后写入新文件。
代码如下:
占内存:
f = open("text.txt",mode='r',encoding = 'utf-8') f_new = open("text_new.txt",mode='w',encoding='utf-8') str_old = 'old' str_new = 'new' for line in f: if str_old in line: line = line.replace(str_old,str_new) f_new.write(line) f.close() f_new.close()
占硬盘:
# 把斯拉克换成圣堂刺客 用占内存模式 f = open("text2.txt",mode='r+',encoding='utf-8') data = f.read() data = data.replace("幻影刺客","肉山宝") f.seek(0) #光标移到最初位置,开始修改 f.truncate(0) #把所有文本截断 f.write(data) f.close()
如果修改的字符字数不一样,会出现乱码,所以在替换之前,必须先把文本给截断。