python开发学习 day18-python函数(文件处理b模式,迭代器,生成器。。。)

复习

#map
# l=[1,2,3,4,5]
#
# print(list(map(str,l)))

#reduce
# from functools import reduce
# l=[1,2,3,4,5]
# # reduce(func,l)
# res=reduce(lambda x,y:x+y,l,3)
# print(res)

#filter
# name=['alex_sb','linhaifeng']
# res=filter(lambda x:not x.endswith('sb'),name)
# print(res)
# print(list(res))

#文件操作
# f=open('test11.py','w',encoding='utf-8')
# f.write('1111\n')
# f.write('1111\n')
# f.write('1111\n')
# f.close()

# f=open('test11.py','a',encoding='utf-8')
# f.write('这是a模式的内容')
# f.close()

# f=open('test11.py','r+',encoding='utf-8')
# f.write('hello')
View Code

 

一、文件处理b模式

# f=open('test11.py','rb',encoding='utf-8') #b的方式不能指定编码
# f=open('test11.py','rb') #b的方式不能指定编码
# data=f.read()
# #'字符串'---------encode---------》bytes
# #bytes---------decode---------》'字符串'
# print(data)
# print(data.decode('utf-8'))
# f.close()


# f=open('test22.py','wb') #b的方式不能指定编码
# f.write(bytes('1111\n',encoding='utf-8'))
# f.write('杨件'.encode('utf-8'))

f=open('test22.py','ab') #b的方式不能指定编码
# f.write('杨件'.encode('utf-8'))

# open('a;ltxt','wt')
View Code

 

二、文件操作的其他方法(tell,seek,read,truncate,flush)

# f=open('a.txt','r+',encoding='gb2312')
# # data=f.read()
# # print(data)
# f.write('你好')

# f=open('b.txt','r+',encoding='latin-1')
# data=f.read()
# print(data)
# f.write('aaaaaaaaaaa')

# f=open('b.txt','r',encoding='utf-8',newline='') #读取文件中真正的换行符号
# f=open('b.txt','r+',encoding='utf-8',newline='') #读取文件中真正的换行符号

# print(f.closed)
# print(f.encoding)
# f.flush()
# print(f.readlines())

# print(f.tell())
# f.readline()
# print(f.tell())

# f.seek(1)
# print(f.tell())
# print(f.readlines())
# f.seek(3)
# print(f.tell())
# print(f.read())

# data=f.read(1)
# print(data)

# f.truncate(10)


# f.flush() #讲文件内容从内存刷到硬盘
#
# f.closed #文件如果关闭则返回True
#
# f.encoding #查看使用open打开文件的编码
# f.tell() #查看文件处理当前的光标位置
#
# f.seek(3) #从开头开始算,将光标移动到第三个字节
# f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写方式打开,但是w和w+除外
#
# f=open('d.txt','r',newline='')
#
# data=f.readline().encode('utf-8')
# print(data)
# print(f.tell())







# f=open('seek.txt','r',encoding='utf-8')
# print(f.tell())
# f.seek(10)
# print(f.tell())
# f.seek(3)
# print(f.tell())

# f=open('seek.txt','rb')
# print(f.tell())
# f.seek(10,1)
# print(f.tell())
# f.seek(3,1)
# print(f.tell())


# f=open('seek.txt','rb')
# print(f.tell())
# f.seek(-5,2)
# print(f.read())
# print(f.tell())
# f.seek(3,1)
# print(f.tell())









# f=open('日志文件','rb')
# data=f.readlines()
# print(data[-1].decode('utf-8'))

f=open('日志文件','rb')

# for i in f.readlines():
#     print(i)

#循环文件的推荐方式
# for i in f:
#     print(i)

for i in f:
    offs=-10
    while True:
        f.seek(offs,2)
        data=f.readlines()
        if len(data) > 1:
            print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
            break
        offs*=2
View Code

 

三、读取大文件最后一行(seek, 偏移量offset)

f=open('d.txt','rb')

for i in f:
    offs=-3
    n=0
    while True:
        f.seek(offs,2)
        data=f.readlines()
        if len(data) > 1:
            print('最后一行',data[-1])
            break
        offs*=2
View Code

 

四、迭代器和生成器

# x='hello'
# # print(dir(x))
# iter_test=x.__iter__()
#
# print(iter_test)
# print(iter_test.__next__())
# print(iter_test.__next__())
# print(iter_test.__next__())
# print(iter_test.__next__())
# print(iter_test.__next__())
# print(iter_test.__next__())

# l=[1,2,3]
# for i in l:  #i_l=l.__iter_()  i_l.__next__()
#     print(i)

# index=0
# while index < len(l):
#     print(l[index])
#     index+=1


# iter_l=l.__iter__() #遵循迭代器协议,生成可迭代对象
# print(iter_l.__next__())
# print(iter_l.__next__())
#
# for i in l:
#     print(i)

s={1,2,3}

# for i in s:
#     print(i)
# iter_s=s.__iter__()
# print(iter_s)
# print(iter_s.__next__())
# print(iter_s.__next__())
# print(iter_s.__next__())
# print(iter_s.__next__())

# dic={'a':1,'b':2}
# iter_d=dic.__iter__()
# print(iter_d.__next__())

# f=open('test.txt','r+')
# # for i in f:
# iter_f=f.__iter__()
# print(iter_f)
# print(iter_f.__next__(),end='')
# print(iter_f.__next__(),end='')
# l=[1,2,3,4,5]
# diedai_l=l.__iter__()
# while True:
#     try:
#         print(diedai_l.__next__())
#     except StopIteration:
#         # print('迭代完毕了,循环终止了')
#         break

l=['die','erzi','sunzi','chongsunzi']

iter_l=l.__iter__()
print(iter_l)
# print(iter_l.__next__())
# print(iter_l.__next__())
# print(iter_l.__next__())
# print(iter_l.__next__())
# print(iter_l.__next__())
# print(next(iter_l)) #next()---->iter_l.__next__()










def test():
    yield 1
    yield 2
    yield 3
g=test()
print('来自函数',g)
# print(g.__next__())
# print(g.__next__())

#三元表达式
# name='alex'
# name='linhaifeng'
# res='SB' if name == 'alex' else '帅哥'
# print(res)


#列表解析
# egg_list=[]
# for i in range(10):
#     egg_list.append('鸡蛋%s' %i)
# print(egg_list)

l=['鸡蛋%s' %i for i in range(10)]
# l1=['鸡蛋%s' %i for i in range(10) if i > 5 ]
# # l1=['鸡蛋%s' %i for i in range(10) if i > 5 else i] #没有四元表达式
# l2=['鸡蛋%s' %i for i in range(10) if i < 5] #没有四元表达式

print(l)
# print(l1)
# print(l2)

laomuji=('鸡蛋%s' %i for i in range(10)) #生成器表达式
print(laomuji)
print(laomuji.__next__())
print(laomuji.__next__())
print(next(laomuji))
print(next(laomuji))
print(next(laomuji))
print(next(laomuji))
print(next(laomuji))
print(next(laomuji))
print(next(laomuji))
print(next(laomuji))
# print(next(laomuji))

l=[1,2,3,34]
# map(func,l)

# print(sum(l))
# print(sum())
# print(sum(i for i in range(10000000000000)))
View Code

 

posted @ 2018-11-07 20:36  apoorgod  阅读(85)  评论(0)    收藏  举报