python基础------文件读写操作、re、os和sys模块

1. 文件读取

1.1 file文件
在这里插入图片描述
在这里插入图片描述
file文件读取:只能写入字符串,如果要写入字符串以外的数据,先将他转换为字符串,文件内的数据不容易操作


#文件打开
file.open()
#文件关闭
file.close()
#读取文件
file.read()
#读取一行
file.readline()
#读取一行,返回列表
file.readlines()
#写
file.write()
#写一行
file.writelines()
#返回文件当前的指针位置
file.tell()
#设置光标位置,0代表文件开头,1代表文件当前位置,2代表文件末尾
file.seek(偏移量,0|1|2)
#读取文件后,截取n行
file.truncate(n)
#读取文件内容
with open('info.txt','rt',encoding='utf8') as file:
    emp=file.read()
    print(emp)
#文件内容写入
with open('note.txt','wt+') as fa:
    fa.write(str(c+d))
    fa.seek(0)
    print(fa.read())

1.2 shelve:以键值对的形式存储,键必须是字符串,值可以是任意类型,方便操作
在这里插入图片描述

import  shelve
d=shelve.open('a.txt')
#存储信息
d['tom']={'age':18,'sex':'male'}
#修改信息
d['tom']={'age':20,'sex':'male'}
#访问文件
d['tom']['sex']
#关闭文件
d.close()

1.3 pickle:将python支持的数据,进行序列化的存取
在这里插入图片描述

import  pickle
#pickle.dump(obj, file)
#必填参数obj表示将要封装的对象
#必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”
data = ['aa', 'bb', 'cc'] 
with open('text', 'wb') as f:
	 #写入文件,只能写一次
     pickle.dump(data, f)

with open('text', 'rb') as f:
	 #读取文件
     result = pickle.load(f)
     print(result)

2. os模块

定义:os模块是方便与操作系统相互交互的模块
功能:系统相关、目录及文件操作、执行命令和管理进程
在这里插入图片描述
在这里插入图片描述

import os
#列出指定目录的文件和文件夹
os.listdir(path)
#获取当前路径
os.getcwd()
#删除目录或多层目录
os.rmdir/removerirs()
#将分离的各部分组成一个路径名
os.path.join(path1,path2)
#判断是否为目录(文件夹),参数为绝对路径
0s.path.isdir(path)
#判断是否为文件,参数为绝对路径
0s.path.isfile(path)
#当前系统的类型
os.name
#删除文件
os.remove()
#生成目录树下的所有文件名
os.walk(path)
#创建目录/多层目录
os.mkdir/makedirs(dirname)
#返回当前文件的绝对路径
os.path.abspath('文件名')
#判断路径是否存在
os.path.exists(path)
#返回上一级目录
os.chdir('..')
#进入到当前目录
os.chdir('c:/user/86178/desktop/1234')


3. sys模块

在这里插入图片描述

#命令行参数List,第一个元素是程序本身路径
sys.argv
#返回操作系统平台名称
sys.platform
#返回python解释器版本信息
sys.version
退出程序,sys.exit(0)
sys.exit(n)
#标准输出
sys.stdout.write()print
#标准输入
sys.stdin.readline()input
#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.path

练习1:

# ①打开并读取文件 info.txt中的内容
# ②将读到的文件内容,存入到变量emp_info
import re,sys,os,datetime,calendar,time
with open('info.txt','rt',encoding='utf8') as file:
    emp_info=file.read()
    print(emp_info)
# ③在emp_info内,用正则获取到新师面试的日期,输出出来
a=re.findall(r'[\d]{4}-[\d]{2}-[\d]{2}',emp_info)
print(a[0])
# ④面试不通过,将在20天后还有二次面试的机会,计算二次面试的日期。
b=time.strptime(a[0],'%Y-%m-%d')
print(b)
c=datetime.date(b[0],b[1],b[2])
d=datetime.timedelta(days=20)
print(f'二次面试的日期为:{c+d}')
# ⑤用正则获取到新师所有的成绩,并输出
e=re.findall(r'[\d]{2}\.[\d]{1}',emp_info)
print(e)
# ⑥计算出这位新师刘丽丽的面试平均成绩
# ⑦如果平均成绩高于97.5请输出一句话:可以录取,如果低于97.5则手动抛出一个异常。
# ⑧异常被捕获之后,输出:请准备于XX月XX日参加二次面试(写上二次面试的日期)
f=[float(i) for i in e]
print(f)
try:
    g=sum(f)/len(f)
    print(f'刘丽丽的平均成绩为:{g}')
    print('可以录取')
    if g<97.5:
        raise Exception
except Exception:
    print('请准备于7月11日参加二次面试')

# ⑨在pycharm当前目录下,新建文件note.txt,将二次面试的日期写入
with open('note.txt','wt+') as fa:
    fa.write(str(c+d))
    fa.seek(0)
    print(fa.read())
# ⑩用正则获取到刘丽丽邮箱,将邮箱一同写入note.txt中(不要删除日期)
h=re.findall(r'[\w]{7}@qq.com',emp_info)
print(h[0])
# ⑪获取你pycharm当前的工作目录
print(os.getcwd())
# ⑫获取当前的目录下的所有文件及文件夹
print(os.listdir(os.getcwd()))

练习2:

# 1.编写Python程序,实现如下功能:
# (1)编写函数,可以求出100 - 999之间所有的水仙花数,并返回。
# (2)调用该函数,将得到所有水仙花数据写入文件t1.txt
# (3)使用文件操作方式打开t1.txt文件,读取文件内容,并打印出来
def number():
    ls=[]
    for i in range(100,999):
        if (i%10)**3+(i//10%10)**3+(i//100%10)**3==i:
            ls.append(i)
    ls1=[str(i) for i in ls]
    return ' '.join(ls1)

with open('t1.txt','wt') as f:
    g=f.write(number())
    print(g)
    f.close()
with open('t1.txt','rt') as f1:
    h=f1.read(g)
    print(h)
    f1.close()
# 2.编写Python程序,实现如下功能:
# (1)手动创建名为t2.txt的文件,将以下内容添加到文件中
# This is a message
# tony是一个名副其实的iron - man。
# tony其实是个男人。
# 谁说tony是坏人?
# 你们真逗,tony再厉害,也掩饰不住资深富人的气质。

with open('t2.txt','wt',encoding='utf8') as ff:
    fa=ff.write('This is a message\ntony是一个名副其实的iron - man。\ntony其实是个男人。\n谁说tony是坏人?\n你们真逗,tony再厉害,也掩饰不住资深富人的气质')
    # print(fa)
# (2)使用文件操作方式打开t2.txt文件:
with open('t2.txt', 'rt+', encoding='utf8') as ff:
    fb=ff.read()
    b = str(fb).replace('tony', 'TONY')
    # print(b)
# (3)将文件中所有的tony都替换成大写的TONY
    b = str(fb).replace('tony', 'TONY')
    # print(b)

# with open('t2.txt', 'r+', encoding='utf8') as ff:
    d=ff.write(b)
    print(d)
    ff.close()
# (4)使用文件操作方式打开t2.txt文件,读取文件内容,并打印出来
with open('t2.txt','rt',encoding='utf8') as aa:
    c=aa.read(d)
    print(c)

练习3:

# 5.写Python程序,完成如下功能。
# ①生成1 - 100
# 之间所有能被3整除的整数,保存在列表alist中并输出
# ②将alist的所有元素写入文件test3.txt中
# ③通过读方式打开test.txt文件,读取该文件中的内容并打印输出
alist=[]
for i in range(1,100):
    if i%3==0:
        alist.append(i)
print(alist)
ls=[str(i) for i in alist]
l=' '.join(ls)
# print(l)
with open('test3.txt','wt') as f:
    la=f.write(l)
    print(la)
with open('test.txt','rt') as f1:
    lb=f1.read(la)
    print(lb)
# 1.使用文件处理,完成以下操作
# (1)文件信息写入
# ①编程创建一个新文件,文件名称为c.txt
# ②利用代码,查找出1-100之间所有能被3整除的数字
# ③将上一问中的数字,写入到c.txt文件
# (2)文件信息写出
# ①重新打开文件c.txt,获取文本内容
# ②将文本内容进行处理,获取
ls=[]
for i in range(1,100):
    if i%3==0:
        ls.append(i)
方法一
with open('c.txt','wt',encoding='utf8') as file:
    b=file.write(str(ls))
with open ('c.txt','rt',encoding='utf8') as f:
    f.read(b)
    f.seek(0,0)
    print(f.read())
方法二
with open('c.txt','rt+',encoding='utf8') as file:
#     file.write(str(ls))
#     file.seek(0,0)
#     c=file.read()
#     print(c)

练习4:

# 2.1)现在有一份‘邀请函.txt’的空白文件,请在同级目录下,编写一段代码,将内容‘诚挚邀请您来参加本人生日晚会’写入。
with open('邀请函.txt','wt+',encoding='utf8') as fa:
    fa.write('诚挚邀请您来参加本人生日晚会\n')
# 2)在第一题的基础上,添加上问候语和发件人,内容是’best regards 李帆’,让内容看起来是:
# 诚挚邀请您来参加本次宴会
# best regards
# 李帆
    fa.write('best regards\n')
    fa.write('李帆')
    print(fa)
    fa.seek(0,0)
    b=fa.read()
    print(b)

练习5:

# 3)在第二题的基础上,这封邮件需要发送给‘丁二’、‘张美丽’、‘韩梦’三位朋友,请在邮件内容开头处添加收件人名字,并且生成相应名字的邮件。邮件内容应该为:
# 丁二:
# 诚挚邀请您来参加本次宴会
# best regards
# 李帆

import shelve,pickle
with open('邀请函.txt','wt+',encoding='utf8') as fa:
    # fa.write('诚挚邀请您来参加本人生日晚会\n')
    fa.write('诚挚邀请您来参加本次宴会\nbest regards\n李帆')
    fa.seek(0)
    f = fa.read()
    with open('丁二.txt','rb+') as fb:
        pickle.dump('丁二:\n'+f,fb)
        fb.seek(0,0)
        c=pickle.load(fb)
        print(c)
        fb.close()
        print('----------------------')
    with open('张美丽.txt','rb+') as fc:
        pickle.dump('张美丽:\n'+f,fc)
        fc.seek(0,0)
        d=pickle.load(fc)
        print(d)
        fc.close()
        print('-----------------------')
    with open('韩梦.txt','rb+') as fd:
        pickle.dump('韩梦:\n'+f,fd)
        fd.seek(0,0)
        e=pickle.load(fd)
        print(e)
        fb.close()

# with open('丁二.txt','wt+',encoding='utf8') as fb:
#     fb.write('丁二:\n')
#     fb.write(b)
#     fb.seek(0,0)
#     c=fb.read()
#     print(c)
#     fb.close()
# with open('张美丽.txt','wt+',encoding='utf8') as fb:
#     fb.write('张美丽:\n')
#     fb.write(b)
#     fb.seek(0,0)
#     d=fb.read()
#     print(d)
#     fb.close()
# with open('韩梦.txt','wt+',encoding='utf8') as fb:
#     fb.write('韩梦:\n')
#     fb.write(b)
#     fb.seek(0,0)
#     e=fb.read()
#     print(e)
#     fb.close()

练习6:

# 4)编写Python程序,实现如下功能:
# t2.txt的数据: Repetition is the mother of all learning重复是学习之母。
# ①读取文件t2.txt的数据保存在astr中并输出
# ②将astr中所有的小写字母都转为大写,原大写字母不变,得到一个新的数据并输出
# ③使用合适方法截取t2.txt文件,只保留原始数据的前10个字节
# ④打开确认是否正确截取
with open('t2.txt','rt+',encoding='utf8') as ff:
     ff.write('Repetition is the mother of all learning重复是学习之母')
     ff.seek(0,0)
     astr=ff.read()
     print(astr)
     a=astr.upper()
     print(a)
     b=ff.truncate(10)
     print(b)
# 5)新建名为work的源程序文件,编写Python程序,完成如下功能。(30分)
# (1)(1) 将已经给定的文件work.jpg放置到桌面上,并读取(提示:不是文本文件)查看、输出读取的内容
# (2)再将读取的内容写入到pycharm当前目录下的wk.jpg中(如果无此文件就创建1个)
# (3)将图片work.jpg中的3行文字逐行写入wk.txt中(如果无此文件就创建1个)
# (4)读取中wk.txt的内容,放入words 中
# (5)将内容中的'你'替换成'you'
with open(r'C:\Users\86178\Desktop\work.jpg','rb') as fc:
    c=fc.read()
    print(c)
with open(r'wk.jpg','wb+') as f:
    f.write(c)
    f.seek(0)
    print(f.read())

with open(r'wk.txt','wt+',encoding='utf8') as fb:
    fb.writelines('自己不努力,别人帮你是情分,不帮你是本分,别人也不会帮你')
    # print(fb.sell())
    fb.seek(0,0)
    b=fb.read()
    print(b)
    c=b.replace('你','you')
    print(c)

练习7:

# 2.使用os,sys完成以下操作
# (1)查看操作系统平台名称
print(sys.platform)
# (2)查看python解释程序的版本信息
print(sys.version)
# (3)查看当前工作目录
print(os.getcwd())
# (4)在当前工作目录下,使用异常处理解决新建空目录adir时出现的错误:
# 如果空目录不存在,新建
# 如果空目录已存在,提示已存在
if not os.path.exists(r'E:\untitled2\datedate\adir'):
    os.mkdir(r'E:\untitled2\datedate\adir')
else:
    print('提示已存在')
# (5)查看当前工作目录下的所有文件和目录
# (6)输出当前工作目录下所有文件和目录的绝对路径
for i in os.listdir(os.getcwd()):
    i1=os.path.abspath(i)
    print(i1)

练习7:

import os
# (1)输出pycharm当前的工作目录及文件
print(str(os.listdir(os.getcwd())))
print('--------------------------------------------------------------')
# (2)以追加的方式打开文件week2.txt(提示:考试题中已经给出此文件)
# (3)读出week2.txt中的内容(注意文件指针位置)
with open('week2.txt','at+',encoding='utf8') as f:
    # f.seek(0)
    # f.read()
    f.write(str(os.listdir(os.getcwd())))
    f.seek(0)
    g=f.read()
    print(g)
# (4)将当前工作目录中的文件和目录名追加写入新文件week2.txt
# (5)在当前工作目录中再新建xx和yy这2个空目录
if not os.path.exists('xx'):
    os.mkdir('xx')
if not os.path.exists('yy'):
    os.mkdir('yy')
# (6)接着在week2.txt中写入字符串“---------”,
with open('week2.txt','wt',encoding='utf8') as f:
    f.write('---------\n')
# (7)最后将当前工作目录中所有的目录再次写入week2.txt
    f.write(str(os.listdir(os.getcwd())))

练习8:

# 1)以读写方式打开给定的info.txt文件
import os,sys,re
with open(r'C:\Users\86178\Desktop\06-1人工能学院Python6月周考3\info.txt','rt',encoding='utf8') as file:
# 2)读取文件中的所有内容,放入my_st之中
    my_st=file.read()
    print(my_st)
# 3)在当前的pycharm工作目录下新建2个文件夹mytel,mybox
if not os.path.exists('mytel'):
    os.mkdir('mytel')
if not os.path.exists('mybox'):
    os.mkdir('mybox')
# 4)输出当前目录下所有的文件和文件夹
b=os.getcwd()
c=os.listdir(b)
print(c)
# 5)用指令删除新建的文件夹mybox
if os.path.exists('mybox'):
    os.rmdir('mybox')
# 6)查看当前目录中的所有文件,确保mytel已经创建,mybox已经删除
d=os.listdir(os.getcwd())
print(d)
# 7)获取7(上一题目)中所有文件的绝对路径,并写入到当前目录下新建的文件my_path.txt之中
with open('my_path.txt','wt',encoding='utf8') as ff:
    for i in d:
        e=os.path.abspath(i)
        ff.write(e)
# 8)输出系统的版本号
print(sys.version)
# 9)匹配出my_st中所有北京的电话号码,格式如010-XXXXXXXX(其中010为北京区号)
j=re.findall('010-[\d]{8}',my_st)
print(j)
# 10)把这些号码写入到mytel下的新建文件tel.txt之中
os.chdir('mytel')
for i in j:
    with open('tel.txt','a+') as fa:
        fa.write(i+'\n')

# 11)每行电话号码写入后,进行换行
# 12)用正则匹配,再将my_st中找出所有类似2021-9这样的时间(年,月)获取并输出
print(re.findall('[\d]{4}-[\d]{1,2}', my_st))
# 13)再编写一个正则表达式reg,用来获取163邮箱
reg=r'[\d\w]{6,10}@163\.com'
print(re.findall(reg, my_st))
# 14)用reg从my_st中匹配一个163邮箱并输出        

练习9:

# 1.使用正则和相关python模块完成以下操作(每小题4分)
# 1)获取并输出你pycharm的系统版本号
import re,os,sys
# 2)在你的pycharm中,获取当前的工作目录,放入cf之中,输出cf下的所有文件及文件夹
cf=os.getcwd()
print(cf)
print(os.listdir(cf))

# 3)定义一个函数show_files(ph),参数ph代表一个目录(或路径),功能是输出ph下所有的文件和文件夹
def show_files(ph):
    os.chdir(ph)
    print(os.listdir(ph))
# show_files(r'C:\Users\86178\Desktop')
# 4)打开并读取的zhang.txt文件,放入stu中
with open(r'C:\Users\86178\Desktop\07-1人工能学院Python7月周考3\zhang.txt','rt',encoding='utf8') as file:
    stu=file.read()
    print(stu,type(stu))

# 5)用正则,从stu中提取到张宝的入学日期并输出
da=re.findall(r'[\d]{4}-[\d]{1,2}-[\d]{2}',stu)
print(da[0])
# 6)用正则,从stu中提取到张宝的所有成绩并输出
db=re.split(r',|;', stu)
print(db)
la=[]
for i in db:
    c=re.search(r'成绩[\d]{2}\.?[\d]?$',i)
    if c:
        aaa=c.group()
        la.append(aaa)
print(la)
for i in la:
    d = re.search(r'[\d]{2}\.?[\d]?$', i)
    print(d.group())
# 7)用正则,从stu中提取到张宝的电子信箱并输出
print(re.search(r'[\w]{6,10}@(qq|163|126)\.com', stu).group())
# 8)在当前的pycharm工作目录下新建3个文件夹zh_score,zh_mail,zh_date
ls=['zh_score','zh_mail','zh_date']
for i in ls:
    if not os.path.exists(i):
        os.mkdir(i)

# 9)调用函数show_files,输出当前目录下所有的文件和文件夹
print(os.getcwd())
show_files(os.getcwd())
# 10)用指令删除新建的文件夹zh_date

if os.path.exists('zh_date'):
    os.rmdir('zh_date')
# 11)在zh_score中创建文件note.txt,并写入5)和6)中的内容:张宝的入学日期,张宝的成绩
import pickle
 with open('note.txt','ab+') as f:
     pickle.dump(da[0],f)
 with open('note.txt','ab+') as fl:
     for i in la:
         d = re.search(r'[\d]{2}\.?[\d]?$', i)
         pickle.dump(d.group(),fl)
 with open('note.txt','rb+') as fa:
     print(pickle.load(fa))
if not os.path.exists('zh_score'):
    os.makedirs(r'zh_score')
os.chdir('zh_score')
with open('note.txt','wt+',encoding='utf8') as fb:
    fb.write(da[0]+'\n')
    for i in la:
        d = re.search(r'[\d]{2}\.?[\d]?$', i)
        fb.write(d.group()+'\n')
    fb.seek(0,0)
    print(fb.read())
# 12)在zh_score中创建文件note2.txt,并写入以下内容:
with open('note2.txt','wt+',encoding='utf8') as fc:
    fc.write('2021年中伏天从7月21号开始,饮食应注意:\n'
             '1.去除湿气\n'
             '2.应注意少糖\n'
             '3.避开冰冷食物\n'
             '4.应以开胃为主\n'
             '5.应多食干粮\n'
             '6.补气去火')
    fc.seek(0)
    print(fc.read())
# 13)调用函数show_files,输出zh_score下所有的文件和文件夹
show_files(r'E:\untitled2\python2\8月28日\zh_score')
# 14)输出zh_score下所有的文件和文件夹的绝对路径
bb=os.path.abspath('zh_score')
print(bb)
cc=os.chdir(r'E:\untitled2\python2\8月28日\zh_score')
# os.chdir('..')
print(os.listdir(cc))

练习10:

# 3.['吴文哲','刘鑫','冯鑫','杨欣冉','王欢']请在D盘的根目录下分别创建几个文件夹,分别以这几位同学的姓名命名。
# 请把创建的文件夹删除,并做到重复删除时不报错误。
print('---------------------------------------')
a=['吴文哲','刘鑫','冯鑫','杨欣冉','王欢']
for i in a:
    os.chdir(r'D:')
    os.mkdir(i)
    try:
        os.rmdir(i)
    except:
        print('重复删除')
# 4.在你的桌面上建文件夹目录如下:人工智能\1911A\jack
if not os.path.exists(r'C:\Users\86178\Desktop\人工智能\1911A\jack'):
    os.makedirs(r'C:\Users\86178\Desktop\人工智能\1911A\jack')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞龙程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值