1.文件读取方类型

r,r+,w,x,a,

r,读文件

w,写文件,文件内容全部删除,并将新内容从第一行开始赋值

x,写文件,只有文件不存在,可写,文件存在,报错

a,在文件莫问追加信息

r+,w+,x+,a+ 文件均为可读可写

rb,wb,xb,ab

rb,b的方式不能指定编码,读出原生二进制码,要显示原生字符需要解码操作

f = open('test11.py','rb')
data = f.read()
print(data)
window平台,二进制可显示回车符‘\r\n’

2.文件处理b模式与seek()函数用法(三种模式)

seek(self,0)光标以0绝对位置移动到指定self位置,seek(self,1)必须b模式打开文件;以相对位置方式移动,如首次seek(10,1),seek(3,1) 光标第二次向后移动3个字节;seek(self,2)光标以首先移动到最后自己,再以self指定位置移动,2模式多用于读取文件,日志最后航=行

#数字与二进制转换的两种方法
res = bin(111).replace('ob','')
print(res)
"{0:b}".format(12345) #字符串转换成二进制,bytes()方法,encode方法
x = '俞育堃'
b = bytes(x,encoding='utf-8') #方法一
print(b)
print(type(x),type(b))
print(x.encode('utf-8')) #方法二 f = open('test11.py','rb',encoding='utf-8') #b方式不能指定编码形式 上述代码报错
f = open('test.py','rb')
data = f.read()
print(data)
print(data.decode('utf-8')) #默认换行
f.close() f = open('gbk1','wb')# b的方式不能编码
f.write(bytes('123\n',encoding='utf-8'))#写入文件的两种形式
f.write('俞育堃'.encode('utf-8'))
f.close() f = open('test.py','ab')#b的方式不能编码
f.write(bytes('俞育堃',encoding='gbk')) #首先windows系统内部用gbk编码,其次文件用什么形式编码,对应用什么形式写入
f.write('俞育堃'.encode('gbk'))
f.write(bytes('俞育堃',encoding='utf-8'))
f.write('俞育堃'.encode('utf-8')) f = open('a.txt','r+',encoding='utf-8')
data = f.read()
print(data)
f.write('\naaaaa?') f = open('a.txt','r',encoding='gbk',newline='')
f = open('a.txt','r',encoding='utf-8',newline='') #newline方式,真正读取到os系统中的换行符\r\n
res = f.readlines()
print(f.tell()) #光标所在位置 f = open('a.txt','w',encoding='utf-8')
a = f.read() #read()与readlines()区别,read()直接读出所有数据,readlines()将读到内容输入到列表中
print(a)
a = f.readlines()
print(a)
#除了read()方法,python处理文件用字符方法,其余文件读取方法用字节方法
f.seek(0)
print(f.readlines())
print(f.tell()) #seek(self,1)模式
f = open('seek.txt','rb')
print(f.tell())
f.seek(10,1)
print(f.tell())
f.seek(3,1)
print(f.tell()) #seek(self,2)模式
print(f.read(2)) #read(),字符方法读取文件(光标移动为一个位置一个字符)结果-‘你好’其余方式读取文件内光标移动都是以字节为单位,如tell(),seek()
f.seek(0)
print(f.tell()) #tell(),字节方法读取文件(unicode2字节,gbk2字节,utf-8(2字节),结果-'['你好yuyukun\n', 'aaaaaaaa']')
f.write('aaaa')
f.truncate(2) #截取字节,数字代表字节数 x = '俞育堃'
y = 'aaa'
print(bytes(x.encode('utf-8')),bytes(y.encode('utf-8'))) print(f.seek(5))
print(f.readlines())
print(f.tell())
f.seek(0)
print(f.readlines()) print(f.tell())
print(f.seek(3,2)) for i in f:
# f.seek(0)
data = f.readline()
print(data.decode('utf-8')) # seek(self,0)读取文件的方式
# 3种:seek(self,0)或1,2
f = open('a.txt','rb')
for i in f:
offs = -2
while True:
f.seek(offs,2)
data = f.readlines()
if len(data) > 1: #防止文件读不全,如果参数为0,结果是bsbsb,不符合要求,所以参数应大于1,至少读到倒数第二行,并将这些行放到列表中,输出最后一行,即列表[-1]
print('最后一行是%s'%(data[-1].decode('utf-8')))
break
elif len(data) == 1:
print(111)
f.seek(0)
print('文件只有一行时读到最后一行的数据是%s'%(f.readlines())) #只有一行时,遍历列表只遍历一个字符串!!
break
else:
offs *=2
f.close()

4.迭代器:可以被next()函数调用并不断返回下一个值的对象称为迭代器(iterator)

卖包子,下蛋模型和迭代器人口统计模型

人口普查源数据:

{'name':'北京','population':100}
{'name':'山东','population':200}
{'name':'山西','population':300}
{'name':'河北','population':400}
{'name':'台湾','population':500}
#迭代器函数例子1_卖包子
def prod_baozi():
for i in range(100):
yield '生产包子%s'%i
dqbaozi = prod_baozi()
while True:
print(dqbaozi.__next__()) #迭代器函数例子2_下蛋
def alex_xiadan():
li = []
for i in range(100):
li.append(i)
return li def alex_xiadan():
for i in range(100):
yield '下蛋%s'%i
res = alex_xiadan()
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__()) #迭代器函数3_人口普查模型,统计各省份总人数并算出各省份所占总人数比例
def get_population():
with open('人口统计', 'r', encoding='utf-8') as f:
for i in f:
yield i
sum = 0
i = 0
dic = get_population()
for i in dic:
res = eval(i)
print(res['population'])
sum += res['population']
print('total population %s'% sum)
dic = get_population()
for i in dic:
subres = eval(i)
print('每个省的人口占总人口的%s %%' % round((100*subres['population']/sum),5))

5.列表解析和生成数函数,两种模型生成迭代器,再进行next方法(附加列表解析翻版(圆括号生成器表达式))

#列表解析
laomuji = ['鸡蛋%s'%i for i in range(10)]
print(laomuji) #圆括号生成器表达式
l = [1,2,3,4,5]
print(sum(i for i in l)) #生成器函数
l = [1,2,3,4,5]
def test():
yield l
g = test()
print(g.__next__())

6.day018复习

# 3.6 day019
s = '老男孩'
print(type(s))
a = bytes(s,'utf-8')
b = s.encode('utf-8')
print(a,b) num = 12
a = bin(num)
b = oct(num)
c = hex(num)
print(a,b,c) l1 = ['alex',22,33,44,55]
l2 = ['is',22,33,44,55]
l3 = ['good',22,33,44,55]
l4 = ['guy',22,33,44,55]
res = '_'.join(list(zip(l1,l2,l3,l4))[0])
print(res) NAMELIST = ['ALEX','ERIC']
def func():
global NAMELIST
NAMELIST = 23
func()
print(NAMELIST) def digui(n):
if n == 1:
return n
else:
return n*digui(n-1)
res = digui(7)
print(res) # 递归
from functools import reduce
print(reduce(lambda x,y:x*y,[x for x in range(1,8)],2)) #列表解析 默认初值是1,可以人为赋初值 # 打开两个文件,一读一写
with open('a.txt','r') as x,open('abc.txt','w') as y:
y.write(x.read()) #回顾day019内容
#1没有真正的集合,没有内存限制
#2不调用next()或__next__(),迭代器不进行迭代,有延迟加载功能
#3迭代器停留在一个状态时,可进行一些操作,然后进行下一个状态或维持状态不变。
#两种生成器 1列表生成式(进一步发展可到(x for x in range(0,10)形式)) 2生成器函数
#生成器协议 #迭代器协议
def test():
for i in range(0,4):
yield i
t = test()
t1 = (i for i in t) #生成器已迭代完成,结束
t2 = (i for i in t1)
print(list(t1))
print(list(t2))

文件处理,三元操作符,seek()函数,迭代函数和列表解析,reduce函数的更多相关文章

  1. python_08 函数式编程、高阶函数、map、filter、reduce函数、内置函数

    函数式编程 编程方法论: 1.面向过程 找到解决问题的入口,按照一个固定的流程去模拟解决问题的流程 (1).搜索目标,用户输入(配偶要求),按照要求到数据结构内检索合适的任务 (2)表白,表白成功进入 ...

  2. 函数与函数式编程(生成器 && 列表解析 && map函数 && filter函数)-(四)

    在学习python的过程中,无意中看到了函数式编程.在了解的过程中,明白了函数与函数式的区别,函数式编程的几种方式. 函数定义:函数是逻辑结构化和过程化的一种编程方法. 过程定义:过程就是简单特殊没有 ...

  3. functools 中的 reduce 函数基本写法

    reduce 返回的往往是一整个可迭代对象的 操作结果 reduce(函数,可迭代对象) 注:lambda x,y 两个参数 2020-05-04

  4. python 列表解析与map和filter函数

    不知哪儿看到一个说法,大概是当map的函数参数可以直接引用一个已有的函数变量时(比如内建函数int,str之类的),用map更优美些,否则还是用列表解析更直观和快速. 我同意此说法. 昨天在写一个函数 ...

  5. Python3版本中的filter函数,map函数和reduce函数

    一.filter函数: filter()为已知的序列的每个元素调用给定的布尔函数,调用中,返回值为非零的元素将被添加至一个列表中 def f1(x): if x>20: return True ...

  6. Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里

    reduce函数:在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里 用的话要 先引入:>>> from functool ...

  7. 解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列

    本节内容 1.迭代器协议与for循环 2.三元表达式 3.解压序列 4.列表解析 5.生成器 迭代器协议与for循环 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中下一项, ...

  8. java===java基础学习(2)---运算符,三元操作符,数学函数

    主要介绍运算符,和数学函数以及三元运算符: package testbotoo; public class test1 { public static void main(String[] args) ...

  9. 函数---迭代器&生成器&列表解析&三元表达式

    可迭代对象:obj.__iter__   迭代器:iter1=obj.__iter() 1iter1.__next__ 2iter2.__next__   迭代器: 优点:不依赖索引         ...

随机推荐

  1. Orchard是如何呈现内容的

    首先Orchard是一个建立在ASP.NET MVC框架上的CMS应用框架.Orchard在呈现内容的时候也遵循MVC的规律,也是通过Controller来处理Url请求并决定用那个View来呈现那种 ...

  2. 6月19 使用tp框架生成验证码及文件上传

    ThinkPHP中自带能生成验证码的类:ThinkPHP/Library/Think/Verify.class.php 默认情况下,验证码的字体是随机使用 ThinkPHP/Library/Think ...

  3. ubuntu文档保存出现的一些错误

    ubuntu使用vim编辑器保存时,出现了错误,虽然知道基本的保存方法,但是还不够,出现各种错误.基本的保存命令: 写入文件后退出保存:wq后,保存时出现错误E45:已设定选项“readonly”(请 ...

  4. Oracle 11g streams部署

    环境   源服务器 目标服务器 系统版本 CentOS Linux release 7.3.1611 (Core) CentOS Linux release 7.3.1611 (Core) 主机名 s ...

  5. linux是什么,有什么特点

    (1)Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协议.它支持 ...

  6. ubuntu16.04中设置python3

    执行: sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 100 sudo update-alter ...

  7. 破解 JS(原型)继承

    总体分为四大类:利用空对象作为中介继承.Object.create 继承.setPrototypeOf 继承.拷贝继承 function Animal(name, age) { this.name = ...

  8. GDT临时分段

    GDT临时分段 GDT临时段说明 现在已经进入了保护模式, 目前的改变 可以访问1M以上的内存了 可以使用32位的指令操作 问题: 由于以前的是实式下段寄存器寻址方式无法使用了,我们必须切换到使用GD ...

  9. python面向对象的基础语法(dir内置函数、self参数、初始化方法、内置方法和属性)

    面相对象基础语法 目标 dir 内置函数 定义简单的类(只包含方法) 方法中的 self 参数 初始化方法 内置方法和属性 01. dir 内置函数(知道) 在 Python 中 对象几乎是无所不在的 ...

  10. Hide Data into bitmap with ARGB8888 format

    将保存重要信息,如银行卡密码的文本文件隐藏到ARGB8888的A通道. bitmap.h #ifndef BMP_H #define BMP_H #include <fstream> #i ...