f=open('/tmp/passwd')
print(f.read()) ##打印文件的所有行print(f.readline()) ##从第1行依次打印print(f.readline())
print(f.readlines()) ##以列表的格式打印所有行(有"\n"符)print([line.strip() for line in f.readlines()]) ##批量去掉"\n"
f.close()
3.with方法
python2.5以后加入了安全上下文管理器with语句;
with语句执行结束,会自动清理和关闭文件;
withopen(logfile, 'a+') as f:
for i in range(count):
f.write(random.choice(ips) + '\n')
三、open函数的模式
1.r模式
文件不存在,报错;
定位到文件开始,文件默认模式(mode)为r
文件不可写:f.writable()判断是否可写;
2.r+
文件不存在,报错;
定位到文件开始,文件可写;
写入的内容插入文件的最开始;
3.w
文件不存在,则自动创建;
定位到文件开始,以读写的方式打开;
w模式打开会自动清空文件内容;
4.w+
文件不存在,则自动创建;
定位到文件开始,只能写,不能读取;
w模式打开会自动清空文件内容;
5.a
文件不存在,则自动创建;
定位到文件结尾,只能写,不允许读;
6.a+
文件不存在,则自动创建;
定位到文件结尾,以读写方式打开,追加内容;
四、文件指针移动
1.二进制文件
f = open('/home/kiosk/Pictures/Screenshot from 2018-06-06 09-22-29.png', 'rb')
res = f.read()
print(res)
f.close()
fi = open('copy.png', 'wb') ##将原来图片的内容写入新的文件里,即拷贝
fi.write(res)
fi.close()
import codecs
with codecs.open('/Users/michael/gbk.txt', 'r', 'gbk') as f:
f.read() # u'\u6d4b\u8bd5'
五、ip日志文件,每一行为1个IP,求日志文件中出现次数最多的前10个IP
1.冗长代码,逻辑结构不清晰,不建议使用
import random
defip_list(logfile, count):##日志文件名,日志条目大小
ips = ['172.25.254.' + str(ip) for ip in range(1, 255)]
with open(logfile, 'a+') as f: ##生成随机IPfor i in range(count): ##生成日志文件
f.write(random.choice(ips) + '\n') ##注意换行
Num = int(input('please set your num:'))
FileName = input('please set your filename:')
ip_list(Num, 'FileName')
dict = {}
with open('FileName') as f1:
for n in f1:
n = n.strip()
if n in dict:
dict[n] += 1else:
dict[n] = 1
print(sorted(dict.items(), key=lambda item: item[-1], reverse=True)[:10])
2.编写函数,逻辑清晰,便于维护
import random
defip_list(logfile, count):
ips = ['172.25.254.' + str(ip) for ip in range(1, 255)]
with open(logfile, 'a+') as f:
for i in range(count):
f.write(random.choice(ips) + '\n')
Num = int(input('please set your num:'))
FileName = input('please set your filename:')
defsorted_ip(filename, count=10):
ip_list(filename, Num)
ip_dict = dict()
with open(filename) as f1:
for ip in f1:
ip = ip.strip()
if ip in ip_dict:
ip_dict[ip] += 1else:
ip_dict[ip] = 1return sorted(ip_dict.items(), key=lambda item: item[1], reverse=True)[:count]
print(sorted_ip(FileName))
3.采用封装的函数,效率更高
import random
from collections import Counter
defip_list(logfile, count):
ips = ['172.25.254.' + str(ip) for ip in range(1, 255)]
with open(logfile, 'a+') as f:
for i in range(count):
f.write(random.choice(ips) + '\n')
Num = int(input('please set your num:'))
FileName = input('please set your filename:')
defnew_sorted_ip(filename, count=10):
ip_list(filename, Num)
with open(filename) as f:
ips = Counter(f)
return ips.most_common(count)
print(new_sorted_ip(FileName))
4.对比new_sorted_ip和sorted_ip的运行时间
装饰器:
deftimecount(fun):defwrapper(*args, **kwargs):
start = time.time()
res = fun(*args, **kwargs)
end = time.time()
print('%s time is %.4f' % (fun.__name__, end - start))
return res
return wrapper
@timecountdefsorted_ip(filename, count=10):pass@timecountdefnew_sorted_ip(filename, count=10):pass