r:
-只能读,不能写
-读取的文件不存在,会报错
r+:
-可读可写
-文件不存在,报错
w:
-只能写,不能读
-会清空覆盖文件内容
-如果文件不存在,会新建文件
w+:
-可读可写
-文件存在,会覆盖原文件
-文件不存在,创建新文件
a:
-只能写,不能读
-文件不存在,新建文件不报错
-文件存在,不会清空文件内容
a+
-可读可写
-文件不存在的时候,新建文件不报错
-不会清空文件内容
文件操作三部曲:打开 操作 关闭
#打开
f=open('passwdss','a+')
#操作
# content=f.read()
f.write('java')
# print content
f.close()
#关闭文件
#正确读取大文件
file=open('passwd')
#为什么要设定为无限循环:
#因为我们不知道循环的条件
#我们不知道文件到底有多少行
while True:
text=file.readline()
#判断是否读取到了内容
#如果文件指针到文件的最后一行,那么就读取不到内容了
if not text:
break
#每读取一行的末尾已经有一个'\n'
print text
file.close()
打开一个已经有的文件,读取完整的内容,并写到另一个文件中去
#源文件以只读的方式打开
file_read=open('passwdss')
#目标文件以只写的方式打开
file_write=open('passwd_copy','w')
#从源文件中读取内容
text=file_read.read()
#将读取到的内容写道目标文件
file_write.write(text)
#关闭文件
file_read.close()
file_write.close()
读取二进制文件的时候
rb wb ab
rb+ wb+ ab+
#读取二进制文件的内容
f1=open('good.jpg',mode='rb')
content=f1.read()
f1.close()
with open ('data.txt')as f:
lines=f.readline()
print lines
for line in lines:
print line
文件指针:
文件指针标记从哪个位置开始读取数据
第一次打开文件时,通常文件指针会指向文件的开始位置
当执行了read方法后,文件指针会移动到读取内容的末尾
file = open('passwdss')
text = file.read()
print text
print type(text)
print len(text)
print '******'
# 移动文件指针到文件开头
file.seek(0)
text = file.read()
print len(text)
file.close()
京东二面笔试题
1.生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的op
2.读取ips.txt文件统计这个文件中ip出现频率排前10的ip
import random
def create_ips_file(filename):
ips=['172.25.254.'+str(i) for i in range(1,255)]
with open (filename,'a+') as f:
for count in range(1200):
f.write(random.sample(ips,1)[0]+'\n')
def sorted_by_ip(filename,count=10):
ips_dict=dict()
with open(filename) as f:
for ip in f:
if ip in ips_dict:
ips_dict[ip]+=1
else:
ips_dict=1
sorted_ip=sorted(ips_dict.items(),
key=lambda x:x[1],reverse=True)[:count]
return sorted_ip
print sorted_by_ip('ips.txt')
os模块
import os
# 1.返回操作系统类型,值为posix,是linux操作系统,
# 值为nt,是windows系统
print os.name
#
# # 2.返回操作系统的详细
print os.uname()
#
# # 3.系统的环境变量
print os.environ
print os.environ.get('PATH')
# 4.判断是否是绝对路径(不会判断文件或目录是否存在)
print os.path.isabs('/tmp/westos')
print os.path.isabs('/hello')
# 5.生成绝对路径
print os.path.abspath('hello.png')
print os.path.join('/home/kiosk', 'hello.png')
print os.path.join(os.path.abspath('.'), 'hello.png')
# 6. 获取目录名或者文件名
filename = '/home/kiosk/PycharmProjects/python/20180826python/Day08/hello.png'
print os.path.basename(filename)
print os.path.dirname(filename)
# 7. 创建目录/删除目录
os.mkdir('img')
os.makedirs('img/file') # mkdir -p
os.rmdir('img')
# 8. 创建文件/删除文件
os.mknod('westos.txt')
os.remove('westos.txt')
# 9.文件的重命名(mv)
os.rename('westos.txt','data1.txt')
# 10.判断文件或者目录是否存在
print os.path.exists('img')
print os.path.exists('data1.txt')
# 11.分离后缀名和文件名
print os.path.splitext('hello.png')
# 12.将目录名和文件名分离
print os.path.split('/tmp/hello/hello.png')
练习:1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
2.将当前img目录所有以.png结尾的后缀名改为.jpg
import os
import random
import string
def gen_code(len=4):
# 随机生成4位文件名
li = random.sample(string.ascii_letters + string.digits, len)
# 将列表元素拼接成字符串
return ''.join(li)
def create_file():
# 随机生成多个文件名
li = {gen_code() for i in range(100)}
os.mkdir('img')
for name in li:
os.mknod('img/' + name + '.png')
# create_file()
def modify_suffix(dirname, old_suffix, new_suffix):
"""
:param dirname: 所要操作的目录
:param old_suffix: 之前的文件后缀
:param new_suffix: 新的文件后缀
:return:
"""
# 1.判断查找的目录是否存在,如果不存在,显示报错
if os.path.exists(dirname):
# 2.找出所有以old_suffix(.png)结尾的文件
pngfiles = [filename for filename in os.listdir(dirname)
if filename.endswith(old_suffix)]
# 3.将文件名和后缀名分开,留下文件名
basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]
print basefiles
# 4.文重命名
for filename in basefiles:
# 需要加上目录名
oldname = os.path.join(dirname, filename + old_suffix)
newname = os.path.join(dirname, filename + new_suffix)
os.rename(oldname, newname)
print '%s 重命名成%s成功' % (oldname, newname)
else:
print '%s 不存在不能操作....' % dirname
modify_suffix('img','.jpg','.png')
练习:
1. 在当前目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
2. 将当前img目录所有以.png结尾的后缀名改为.jpg
import os
import string
import random
import sys
def gen_code(len=4):
# 随机生成四位的文件名
li = random.sample(string.ascii_letters + string.digits, len)
# 将列表元素拼接为字符串
return ''.join(li)
def create_files():
# 随机生成多个文件名
# 集合生成式
li = {gen_code() for i in range(100)}
os.mkdir('img')
for name in li:
os.mknod('img/' + name + '.png')
# create_files()
def modify_suffix(dirname, old_suffix, new_suffix):
"""
:param dirname: 要操作的目录
:param old_suffix: 之前的文件后缀名
:param new_suffix: 新的文件的后缀名
:return:
"""
# 1.判断查找的目录是否存在,如果不存在,显示报错
if os.path.exists(dirname):
# 2.找出所有以old_suffix(.png)结尾的文件
pngfiles = [filename for filename in os.listdir(dirname)
if filename.endswith(old_suffix)]
# 3.将文件名和后缀名分开,留下所有的文件名
basefiles = [os.path.splitext(filename)[0] for filename in pngfiles]
print basefiles
# 4.文件重命名
for filename in basefiles:
# 需要加上img目录名
oldname = os.path.join(dirname, filename + old_suffix)
newname = os.path.join(dirname, filename + new_suffix)
os.rename(oldname, newname)
print '%s重命名为%s成功' % (oldname, newname)
else:
print '%s 不存在,不能操作' % dirname
if __name__ == '__main__':
# modify_suffix('img','.png','.jpg')
# 如何在执行脚本时,接收用户传入的参数
# 判断用户传入的参数是否为3个
if len(sys.argv) == 4:
dirname = sys.argv[1]
old_suffix = sys.argv[2]
new_suffix = sys.argv[3]
modify_suffix(dirname,old_suffix,new_suffix)
else:
print 'Usage: %s dirname old_suffix new_suffix' %sys.argv[0]