函数式编程(三元运算文件操作)

Posted 爱学习爱生活的小九

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程(三元运算文件操作)相关的知识,希望对你有一定的参考价值。

一、三元运算

简介:

三元运算又称三目运算,是对简单的条件语句简写,如:

#简单条件语句
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是写,也就是先创建一个新文件把之前的文件覆盖掉了,再写入新的数据,所以之前的数据没了,这个一般不会用到!

!未完待续  文件操作的其他功能

 

以上是关于函数式编程(三元运算文件操作)的主要内容,如果未能解决你的问题,请参考以下文章

Python-函数式编程-map reduce filter lambda 三元表达式 闭包

python 三元运算符推导式递归匿名函数内置函数

想学python从哪里入手

python基础:python循环三元运算字典文件操作

第三章函数编程

函数式编程