文件

文件

“”"
r -默认打开文件为只读
-读取文件不存在,会报错

w -write only
-读取文件不存在,会创建新的文件
-读取文件存在,会覆盖原内容

a -write only
-读取文件不存在,会创建新的文件
-读取文年存在,不会删除原文件,会在其后添加新的内容

r+ -可读可写
-读取文件存在,默认情况下,从文件指针所在位置开始写入,并覆盖原文件内容
-读取文件不存在,会报错

w+ -可读可写
-读取文件不存在,会创建新的文件
-读取文件存在,会覆盖原内容

a+ -可读可写
-读取文件不存在,会创建新的文件
-读取文年存在,不会删除原文件,会在其后添加新的内容

“”"

#打开
f = open(’/tmp/passwd’,‘w’)
#操作
#文件指针所在的位置
print(f.tell())
#读取
print(f.read())
#写
print(f.write(‘Python1’))
#检测是否可读,是否可写
print(f.readable())
print(f.writable())
#关闭
f.close()

非纯文本文件的操作

如果要读取非纯文本文件(视频,音频和图片),需要通过二进制的方式进行读写
读取文本文件:
r w a r+ w+ a+ == rt wt at rt+ wt+ at+
读取二进制文件:
rb wb ab rb+ wb+ ab+

#先读取二进制文件内容
f1=open(’/home/kiosk/PycharmProjects/20181117/day07/2.jpg’,mode=‘rb’)
contect=f1.read()
f1.close()
f2=open(‘hello.jpg’,mode=‘wb’)
#写入要复制的文件读到的内容
f2.write(contect)
f2.close()

文件的常用操作

f = open(’/tmp/passwd’,mode=‘r’)
“”"
默认情况下读取文件的所有内容,小的文件直接用read
如果是一个大文件(>内存),readline()
read()括号内可以传参数,意思为读取到第几个字符
“”"
print(f.read(3))
print(f.readline()) # 一行一行读取
print(f.readline())
#读取文件内容,并返回一个列表,列表元素为文件的行内容
print(f.readlines())
f.close()
f=open(’/tmp/passwd’,mode=‘w’)
f.write() #从指针位置写入,写的就是字符串的内容
f.writelines([‘a’,‘b’]) #将列表中的每个元素写入文件
f.close()
f=open(’/tmp/passwd’,mode=‘rb’)
#指针的操作
print(f.tell())
print(‘1:’,f.read(3))
print(f.tell())
f.seek(2,1)
“”"
seek:移动指针
第一个参数:偏移量
第二个参数:
0:移动指针到文件开头
1:移动指针到当前位置
2:移动指针到文件末尾
“”"
f.close()

with

#上下文管理器:打开文件,执行完with语句内容后,自动关闭文件对象
#python2中with一次只能打开一个文件,python3一次可以打开多个,如下:

with open(’/tmp/passwd’) as f1,
open(’/tmp/passwd1’,mode=‘w+’) as f2:

f2.write(f1.read())
f2.seek(0,0)
print(f2.read())

结果如图:
在这里插入图片描述

比较两种的效率:

import time
import string
import random
import functools
def timeit(fun):

“”“这是一个装饰器timeit”""
@functools.wraps(fun) # 可以保留被装饰函数的函数名和帮助信息文档
def add_time(*args, **kwargs): # 接收可变参数和关键字参数

“”“这是一个add_time函数”""
#在函数执行之前计时
start_time = time.time()
#执行函数
#fun(*args,**kwargs)
#函数有返回值时,将函数赋给res
res = fun(*args, **kwargs)
#在函数执行之后计时
end_time = time.time()
print(‘运行时间:%.6f’ % (end_time - start_time))
#返回res
return res

return add_time

@timeit
def a1():

with open(‘mac.txt’) as f1:

m=f1.read()
with open(‘a1.txt’,mode=‘w’) as f2:

f2.write(m)

@timeit
def a2():

with open(‘mac.txt’) as f1,open(‘a1.txt’,mode=‘w’) as f2:

f2.write(f1.read())

a1()
a2()

结果展示:
在这里插入图片描述

练习

创建文件

文件共一万行,每行存放一个1~100之间的整数

import random
f=open(‘theone.txt’,mode=‘w+’)
for i in range(10000):

a=f.write(str(random.randint(1,100)))
f.write(’\n’)

f.seek(0.0)
print(f.read())
f.close()

结果展示:
在这里插入图片描述

京东笔试题

1.生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;
2.读取ips.txt文件统计这个文件中ip出现频率排前10的ip;

import random
def creat_ip():

with open(‘ips.txt’,mode=‘w’) as f1:

for i in range(1200):

a=‘172.25.254.’
a=a+str(random.randint(1,254))+’\n’
f1.write(a)

def a_value(x):

return x[1]

def main():

creat_ip()
dic=[]
with open(‘ips.txt’) as f1:

a = f1.read()
for i in range(1,255):

i_count=a.count(‘172.25.254.%s’ %(i))

print(i_count)

dic.append([i,i_count])

print(dic)

dic=sorted(dic,key=a_value)

return [dic[-i] for i in range(1,11)] # [:10]

key=lambda x:x[1],reverse=True 使用匿名函数作为key值

print(main())

结果展示:
在这里插入图片描述

os

import os
#1.返回操作系统类型 值为:posix,是Linux系统,值为nt,是Windows系统
print(os.name)

#2.操作系统的详细信息
info=os.uname()
print(info)
print(info.sysname)
print(info.nodename)

#3.系统的环境变量
print(os.environ)

#4.通过key值获取环境变量对应的value值
print(os.environ.get(‘PATH’))

#5.判断是否为绝对路径 /tmp/passwd data.txt
print(os.path.isabs(’/tmp/passwd’))

#6.生成绝对路径
print(os.path.abspath(‘hello.png’))
print(os.path.join(’/home/kiosk’,‘hello.png’))
print(os.path.join(os.path.abspath(’.’),‘hello.png’))

#7.获取目录名或文件名
filename=’/home/kiosk/PycharmProjects/20181117/day09/hello.png’
print(os.path.basename(filename))
print(os.path.dirname(filename))

#8.创建目录 删除目录
os.mkdir(‘img’)
os.makedirs(‘img/file1/file2’)
os.rmdir(‘img’)

#9.创建文件 删除文件
os.mknod(‘00_ok.txt’)
os.remove(‘00_ok.txt’)

#10.文件重命名(mv)
os.rename(‘data.txt’,‘data1.txt’)

#11.判断文件或目录是否存在
print(os.path.exists(‘ips.txt’))

#12.分离后缀名和文件名
print(os.path.splitext(‘hello.png’))

#13.将目录和文件分离
print(os.path.split(’/tmp/hello/hello.png’))

练习

1.完成自动创建100个目录,目录名为学生学号,
学号前四位均为’0405’
学号总计为8位,举例如04050001

import os
for i in range(1,101):

i=i/1000
os.mkdir(’/home/kiosk/PycharmProjects/2018.11.17/day09/学号/0405%.4d’ %(i*1000))

2.目录新建目录img, 里面包含多个文件, 文件名各不相同(X4G5.png)
将当前img目录所有以.png结尾的后缀名改为.jpg

import os
import string
import random
def gen_code(len=4):

#随机生成4位的验证码
li = random.sample(string.ascii_letters + string.digits, len)
return ‘’.join(li)

def create_file():

#随机生成100个验证码
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)结尾的文件
pngfile = [filename for filename in os.listdir(dirname) if filename.endswith(old_suffix)]
#pngfiles = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dirname))
#3.将文件名和后缀名分开,留下文件名
basefiles = [os.path.splitext(filename)[0] for filename in pngfile]
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’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值