python课堂5:文件操作,三元运算:


一:文件操作:
open()函数获取文件句柄:open()
文件编码类型检测:
chardet 模块第三方模块,需要单独安装,命令行pip install chardet
import chardet
f = open('test.txt','rb') #这里必须是二进制模式打开。
chardet.detect(f.read()) #检查文件内容的字符编码方式。


文件操作类型:
r 只读,w只写,覆盖,r+读写,追加。w+ 写读,覆盖。a 追加。b 二进制形式,wb 以二进制模式写,rb以二进制模式读。

'''
读取文件时需要注意光标的位置,
可以使用seek()函数设置光标位置,使用tell()查看光标位置
光标位置移动是以字节为单位的,所以字符编码为中文时需要注意:
一个utf8中文字符占三个字节,如果光标位置在中文字符的字节内,会出现乱码的问题。
# f.seek(10) #设置光标位置
# f.seekable() #检测可否设置光标位置
# print(f.tell()) #返回光标位置

# print(f.read()) #读取文件所有内容,并以字符串形式保存。
# print(f.readable()) #检测是否可读
# print(f.readline()) #读取一行
# print(f.readlines()) #把每一行内存读取出来, 作为列表的元素,组成一个列表。

# print(f.mode) #返回文件句柄的模式。
# print(f.name) #返回句柄打开的文件名
# print(f.fileno()) #返回整形的文件描述符
# print(f.isatty()) # 检测文件是否链接到终端设备。


文件写入时:w 方法会直接覆盖文件,没有文件就创建文件。a 追加写在文件最后。
一般对文件修改使用读写模式r+,可以写入文件,并且避免覆盖文件。
写入文件时,一定要指定字符编码,否则很容易出现编码问题。
flush() 文件写入时,系统一般是默认将写入操作缓存在内存中,等文件操作完毕,文件句柄关闭后自动写入硬盘。
但这时如果出现异常情况,关机断电等,内存中的内容就会消失。
所以python提供flush()方法,可以强制直接将缓存内容冲刷进硬盘,减少不必要的麻烦。

# f.write() #写入,字符串。
# f.writable() #检测是否可写
# f.writelines() #写入,字符串构成的列表。

因为文件中的内容每句话默认结尾有\n换行符,
打印时print()中也默认给一个\n换行符,
所以按行读取文件时,会多出一行空行。
解决办法 一,去掉读取文件的末尾的换行符,f.readline().strip() 。二、去掉print()中的换行符print(res,end='')

文件的修改,文件在硬盘中的存储特点决定文件存储时,都是覆盖,没有插入修改。
如果直接使用 r+ 模式seek()到指定位置,进行修改时,发现会将该位置的内容覆盖掉,
而不是将该出的内容挤到后面。
所以修改文件时,想要将部分内容改掉,或者添加一些内容,将其他内容挤到后面,
一般需要将文件内容读取到内存中进行修改,然后在写入硬盘中。
两种方式,一种是全部直接读取到内存中,修改完成后再全部写入硬盘。(消耗内存多)
另一种是多打开一个文件,读取一行,进行修改,写入新文件,
再继续读取下一行,操作,在写入,最后使用新文件替换掉旧文件。
os.replace(newfile,oldfile)相当于将新文件改名为旧文件,覆盖掉原来的旧文件。

 1 import os
 2 change_user = '张三'
 3 change_password = 'zhangsan123'
 4 
 5 file_name = 'io_test.txt'
 6 new_filename = 'new %s'%file_name
 7 
 8 f = open(file_name,'r',encoding='utf-8')
 9 new_f = open(new_filename,'w',encoding='utf-8')
10 for i in f :
11 
12     if change_user in i:
13         i = i.replace(change_user,'qianlei')#句替换为新的句子。
14 
15     if change_password in i:
16         i = i.replace(change_password,'qianlei123')
17 
18     new_f.write(i)
19 
20 # res = f.read()
21 # new_f.write(res)
22 f.close()
23 new_f.close()
24 
25 os.replace(new_filename,file_name)#使用新文件内容替换旧文件。
修改文件内容


二:三元运算
减少代码量,简化流程控制。
三元指 if条件,之前的结果,之后的结果。
如果成立取if 前的结果,不成立取else 后的结果。
a = 3
b = 5
if a>b:
print(a)
else :
print(b)
三元运算: 
res = a if a>b else b
print(res)

























猜你喜欢

转载自www.cnblogs.com/qianduoduo123/p/9236665.html
今日推荐