文件修改等

1、write 和writelines使用区别

writelines是将可迭代对象(list,元组,字符串等)循环读取,。。。('a','b','c','d')

当写入一个字符串的时候,用write效率更高,

如 

with open('0110.txt', 'a+', encoding='utf-8') as a:
names='liyajing,123456' 字符串
f.write(names), 写入字符串,整个写入,效率高
f.writelines(names),写入一个字符串,循环读取liyajing,123456,效率不高
 
2、f.flush立即把缓冲区的内容写到磁盘里面
3、自动关闭文件,用with
with open('a.txt','a+',encoding='utf-8') as a:
打开多个文件,写入多个文件:
with open ('a.txt','a+',encoding='utf-8') as a,open ('a.txt','a+',encoding='utf-8') as b:
4、打开图片,音频,视频 是二进制的方式,指定模式,为rb,wb,ab,其中b是bytes:    with open ('a.txt','ab') as a:
  应用场景:写代码下载图片
5、替换字符串内容,修改文件内容
两种方式:
1)整体修改,适合内容少的文本:
with open('cz.txt','a+',encoding='utf-8') as a:
a.seek(0) 只要存在a+就需要将文件指针移到最前面
all=a.read()读取到所有的
new=all.replace('一','er') 在读取到的文件中 替换文字内容,此时文件指针在最后面,读取到的new是字符串
a.seek(0) 移动文件指针到最前面
a.truncate() 清空文件内容
a.write(new) 将替换后最新的信息写入到cz.txt文件中
a.flush 立即把缓冲区的内容写到磁盘
2)读取每行进行修改,适合文件内容较大的文本
import os 定义模块
with open('cz.txt','a+',encoding='utf-8') as a,open('cz1.txt','a+',encoding='utf-8') as b:打开一个文件,创建一个新文件
a.seek(0) 将cz.txt的文件指针移至最前面
for i in a: 循环读取每行
new=i.replace('yi','er') 在cz.txt中将每行循环读取出的数据,替换,字符串不能编辑,所以新生成一个字符串
b.write(new) 将修改成功的字符串写入新建的文件cz1.txt,此时如果不存在os模块,则存在两个文件
os.remove('cz.txt') 删除原文件
os.rename('cz1.txt','cz.txt') 修改新文件名
6、编写监控日志
需求,从日志文件中60s内,ip地址访问超过200次,加入黑名单 去掉重复
import time
point=0
while True:
ips=[] 放在60s循环内记录
s=set()
with open('access.log',encoding='utf-8') as a:
a.seek(point)
for i in a:
ip=i.split()[0]
ips.append(ip)
if ips.count(ip)>199:
s.add(ip)
for i in s:
print('%s存在重复'%i)
point=a.tell()
time.sleep(60)



7、集合 天生去重

1)定义集合的两种方式:
s=set()
s1={'1','2','3','4'}只存在key值不存在values 即为集合

2)将重复的list强制set:
s2=[1,2,3,4,5,6,6,6,7]
print(set(s2))
运行结果:s2={1,2,3,4,5,6,7}

3)集合是没有顺序的,不存在角标
s3={1,2,3,4,5,6}
print(s3[0])
运行结果:报错,不存在角标

4)增加值,添加重复的值无效
s4={'a','b','c','d','e','f','g','h'}
s4.add('kk')
print(s4)
运行结果是
s4={上述+'kk'} 无序
5)交集(关系测试)(2种方式)
s3={1,2,3,4}
s4={3,5}
print{s3.intersetion(s2)) 运行结果:{3}
另一种方式s3&s4
6)并集(2种方式)
s3={1,2,3,4}
s4={5,6}
print(s4|s3) 运行结果:{1,2,3,4,5,6}
另一种方法,s4.union(s3)

7)差集
s3={1,2,3,4,5,6}
s4={1,8,9}
print(s4.differeence(s3)) 运行结果:{8,9}s4不同于s3的地方

8)删除值(和随机删除一个值)
s3={'1','2','3','4','5','6','7','8'}
s3.pop()随机删除一个值 s3.remove('1')删除固定值
print(s3)

8、函数
函数名+函数体+调用
1)函数的意义:把代码整装成一个组合,提高代码的复用性;函数需要被执行
2)如何定义函数
def hello(): 函数名hello
print('ss') 输入值
hello() 调用
运行结果 ss
3)
def a():
b=open('a.txt','a+',encoding='utf-8')
b.seek(0)
b.write('zhann')
b.close()
a()

def a(name,content):
b=open(name,'a+',encoding='utf-8')
b.seek(0)
b.write(content)
b.close
a('z.txt','内容')

形式参数 name content
实际参数 'z.txt','内容'
位置参数 必填参数 a(name,content)
默认值参数,非必填 a(name,content='') content='',是默认为空,不必须填写,若填写了,则按照填写的内容加入

4)返回值return:
def a(name,content=''):
b = open(name, 'a+', encoding='utf-8')
if content:
b.write(content)
b.seek(0)
res =b.read()
else:
b.seek(0)
res=b.read()
b.close()
return res
print(a('xx3.txt'))
print(a('xx4.txt','c'))
如果想获取到函数处理的结果,那么必须return:
若没有return 则运行结果为none:
return 的作用,立即结束代码
5)返回值和关闭文件的先后顺序:close在return之前
6)全局变量 局部变量
函数里面的变量都是局部变量

a=100#全局变量
def test():
global a#声明全局变量,才能修改为局部变量
a=5 #局部变量
print(a)
def test1():
a=1
print(a)
test()
test1()
print(a) 声明了全局变量,此处打印的是全局变量
7)可变参数
def test (a,b=1,*args):
print(a)
print(b)
print(*args)
test('1','3','56','78','gh')
位置调用:前两个写入对应的a 和b,后面的全部写入*args
关键字调用:
def test (a,b=1,*args):
print(a)
print(b)
print(*args)

t=[1,2,3]

test(*t)
另一种方式:
test(b=5,a=10)
关键字参数,字典key-values
def test2(**kw):
print(kw)
test2(name='s',sex='')
8)模块
分3种
# 1、标准模块,pyhthon 自带,不需要安装 os time random
# 2、第三方模块, 需要安装(pip install ...),别人提供的
# 手动安装时,下载安装包-解压-打开文件,在命令行(shift+鼠标右键)里进入到解压后的目录
查找python安装文件在哪里的命令,where pthon
# 执行Python setup.py install
# 3、自己写的,自己写的python文件


9)环境变量 是让一个命令不管在哪个目录下都可以运行
import 模块名,实质是把python运行一次
print(模块名.函数名(...))
import导入的时候,先从当前目录下找,再从python的环境变量中找
a.从当前目录安装
import 模块名

b.如何查看当前系统的环境变量
import sys
print(sys.path)
c.若要导入其他目录下的python文件,需要先将文件复制到python安装目录,再去导入
import sys
print(sys.path)
import haha

10)把字典的数据写入到文件中
a={'name':'zz'}
f=open('b.txt','a+',encoding='utf-8')
f.write(str(a))

字符串转换成字典eval 字符串必须是字典格式的
ame':'zz'}
f=open('b.txt','a+',encoding='utf-8')
f.seek(0)
# f.write(str(a))
dict=eval(f.read())
print(type(dict))
f.close(

posted @ 2018-01-12 13:33  liyajing  阅读(145)  评论(0编辑  收藏  举报