一、三元运算
简介:
三元运算又称三目运算,是对简单的条件语句简写,如:
#简单条件语句 if 1 < 2: var =1 else: var = 2 print(var) #改成三元运算 var_1 = 1 if 1 < 2 else 2 print(var_1) #输出 1 1
二、文件处理
文件操作分为读、写、修改。
读:
#注意这个路径如果不写绝对路径就是与python程序处于同一路径,建议使用绝对路径 #这里一定要注意编码的问题,以什么编码写的要以什么编码打开,否则就是乱码了 #mode =‘r‘ r参数代表只读 f = open("E:\python学习\函数式编程\学生名称联系方式.bak.txt",mode=‘r‘,encoding=‘gbk‘) #f.read()代表读取所有内容,内容是已经转换完毕的字符串 data = f.read() print(data) #f.close()关闭文件 f.close() #输出 小明 13832408885 小九 13903249995 大琳 13703241110 张三 17888026957 李四 17600789963
rb模式
#为什么这里在打开文件的时候没有指定 encoding,是因为直接以rb模式打开了该文件。 # rb模式是指二进制模式,数据读到内存中都是bytes格式,如果想查看内容需要手动decode, #因此在打开文件阶段不需要指定编码 f = open("E:\python学习\函数式编程\学生名称联系方式.bak.txt",mode=‘rb‘) data = f.read() print(data)
#print(data.decode(‘gbk‘))#手动decode f.close() #输出(因二进制太多只列举一部分) b‘\xd0\xa1\xc3\xf7 13832408885\r\n\xd0\xa1\xbe\xc5 13903249995\r\n\xb4\xf3\xc1\xd5 13703241110
但是如果不知道该程序的编码怎么办?需要借用第三方的工具箱 chardet,这个模块作用就是用于检测文本的编码,因为这个工具python3 本身没有则需要安装.。以下为Windows的安装方式:
C:\Users\小九>pip install chardet
Collecting chardet
Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
100% |████████████████████████████████| 143kB 130kB/s
Installing collected packages: chardet
Successfully installed chardet-3.0.4
You are using pip version 9.0.1, however version 9.0.2 is available.
You should consider upgrading via the ‘python -m pip install --upgrade pip‘ command.
.
chardet 自动检测文本编码模块
import chardet #导入工具库 #这里的读取模式也可以不用加前面的mode,因为默认第二个参数就是读取模式 f = open(‘log.txt‘,‘rb‘) data = f.read() f.close() #使用detect模块以rb的模式打开文件,并检测编码 result = chardet.detect(open(‘log.txt‘,‘rb‘).read()) print(result) #输出 #分别为 encoding 编码格式 ,confidence 对比读越高越可信,language 语言 {‘encoding‘: ‘utf-8‘, ‘confidence‘: 0.7525, ‘language‘: ‘‘}
循环文件
f = open(‘学生名称联系方式.txt‘,‘r‘,encoding=‘utf-8‘) for i in f: print(i) f.close() #输出 小明 13832408885 小九 13903249995 大琳 13703241110 张三 17888026957 #为什么每行之间都有空行,因为print默认输出就是每行之结尾有一个\n的参数
写文件
#模式为w 表示只写(w 就是创建新的文件,如果有文件同名会覆盖掉), #f.write()要写的内容,写入的内容是unicode字符,内部会根据encoding进行转换为指定的编码。 f = open(‘中学生联系方式‘,‘w‘,encoding=‘utf-8‘) f.write("李四 17899662323") f.close() #无输出,会创建名为 ‘中学生联系方式‘ 的文件内容为: 李四 17899662323
二进制模式写是wb
#注意无论是 rb 还是 wb ,二进制一般用于数据传输。
追加
#文件操作时,以‘a‘或‘ab‘模式打开,则只能追加,即在原来内容尾部追加内容 #ab 写入时需要直接传入以某种编码的 0101011即:字节类型 #a 和encoding ,写入时需要传入unicode字符串,内部会根据encoding制定的编码进行转换。 f = open(‘中学生联系方式‘,‘a‘,encoding=‘utf-8‘) f.write("张三 17508322673") f.close() #无输出,文件内容为: 李四 17899662323张三 17508322673 #如果不加别的参数默认就追加到目标文件最后面。
读写混合模式(r+,w+)
#之前说过了,文件能以只读,只写的模式打开,如果想读又想写,就要以 读写的模式打开 #r+读写模式,先读后写 f = open(‘中学生联系方式‘,‘r+‘,encoding=‘utf-8‘) data = f.read() print(data) f.write("我是后面写入的") f.close() print(data) #输出 李四 17899662323张三 17508322673 李四 17899662323张三 17508322673 #文件内容 李四 17899662323张三 17508322673我是后面写入的 #这里肯定会疑惑,为什么第二次输出的时候没有输出写入字符呢,那是因为文件只能读一次,光标一次就读到了的文件的末尾,所以第一次读可以读到文件内容,第二次读光标还在文件末尾所以无法读到新写入的值。 大家也可以对读写模式理解为可追加的读模式
写读模式(慎用)
f = open(‘中学生联系方式‘,‘w+‘,encoding=‘utf-8‘) data = f.read() print(data) f.write(‘\n nwe 1 哇哇‘) f.write(‘\n nwe 2 哇哇‘) f.write(‘\n nwe 3 哇哇‘) print(‘content‘,f.read()) f.close() #输出 content #为什么只输出 content ,我文件里面的内容,文件内容如下: #文件内容 nwe 1 哇哇 nwe 2 哇哇 nwe 3 哇哇 #可以看到文件里之前的文件被覆盖,这就是之前说过的w是写,也就是先创建一个新文件把之前的文件覆盖掉了,再写入新的数据,所以之前的数据没了,这个一般不会用到!
!未完待续 文件操作的其他功能