python文件操作及修改

import requests, os, time

f = open('a', 'w', encoding='utf-8')
f.read() # 读取文件里面所有的内容,返回的是字符串
f.readline() # 只读一行的内容,返回的字符串
f.readlines() # 读取文件里面所有的内容,返回的是一个list
# list里面每个元素是每行的数据
f.write('xxx') # 只能写字符串
f.writelines() # 写可迭代对象
f.tell() # 获取当前文件指针的位置
f.close()
names = ['a', 'b', 'c']
f.write(names) # 文件写入字符串,一次性写入所有
f.writelines(names) # 文件写入,内部循环写数,适用于List写数,提升效率
f.flush() # 立即把缓存区域内容写入磁盘
with open('a', encoding='utf-8') as a, open('b', 'w', encoding='utf-8') as b: # 使用with打开文件,多个使用逗号隔开
a.write('a') # with打开文件,执行结束后自动关闭文件
b.write('b')
open('a.jpg', 'rb') # 以二进制模式打开文件(rb,wb,ab),适用于图片音频操作

# 获取图片文件
url = 'http://pic4.nipic.com/20091217/3885730_124701000519_2.jpg'
img = requests.get(url).content
f = open('a.jpg', 'wb')
f.write(img)

# 修改文件内容
with open('a', 'a+', encoding='utf-8') as f:
f.seek(0) # a+模式打开,文件指针需要前移到开始
all = f.read() # 可以优化,文件过大时效率太低
new_all = all.replace('1', '2')
f.seek(0)
f.truncate()
f.write(new_all)
f.flush()

# 分行修改文件内容,提升效率
with open('a', encoding='utf-8') as a, open('b', 'w', encoding='utf-8') as b:
for line in a: # 循环获取文件每一行
new_line = line.replace('1', '2') # 分行修改文件
b.write(new_line)
os.remove('a') # 删除文件,需要调用os模块
os.rename('b', 'a') # 重命名文件

# 获取日志中的IP
point = 0 # 文件指针
while True:
ips = [] # 存放所有的ip地址
blk_set = set() # 存放需要加入黑名单ip
with open('access.log', encoding='utf-8') as f:
f.seek(point)
for line in f:
ip = line.split()[0]
ips.append(ip)
# 10.125.1.1
if ips.count(ip) > 200:
blk_set.add(ip)
for ip in blk_set: # 这里是因为防止ip重复加入黑名单,因为集合是去重的,所以里面没有重复的ip
# os.system('jiaurru %s'%ip)
print('加入黑名单%s' % ip)
point = f.tell()
time.sleep(30)
posted @ 2018-01-08 16:14  Crish  阅读(350)  评论(0编辑  收藏  举报