目录操作

习题1:
读一个文件,包含英文句子,请统计共多少个不重复并且在另外一个文件中打印每个单词及它出现的次数。
第一步:读文件
方法1:open
方法2:with
难点:怎么把英文句子中的所有标点去掉。
数字也要替换掉。

import string
with open("f:\\a.txt","r") as fp:
    content = ""
    for line in fp:
        s = line
        for i in string.punctuation:
            s = s.replace(i," ")
        content += s

print(content)

word_list = content.split()
print(word_list)
print("一共%s个不重复的单词:" %len(set(word_list)))
word_count = {}
for i in word_list:
    if i in word_count:
        word_count[i]+=1
    else:
        word_count[i]=1

print(word_count)

with open("f:\\b.txt","w") as fp:
    fp.write("一共%s个不重复的单词:" %len(set(word_list)))
    for key,value in word_count.items():
        fp.write("%s单词出现了%s次" %(key,str(value))+"\n")

在这里插入图片描述
在这里插入图片描述
习题2:
写个记账程序,每天收入多少,支出多少,总额剩多少,使用序列化方式保存信息。

income = []
spend = []
deposit = 0
#value|specification
while 1:
    content = input("请输入指令:")
    if content.find("exit")!=-1:
        break

    if content.find("|")==-1:
        print("data format is value|specification")
        print("please input again!")
        continue

    value = content.split("|")[0]
    try:
        value=float(value)
    except:
        print("data format is value|specification")
        print("data format is value must be a number")

    if value>0:
        income.append(content)
        deposit+=value
    elif value==0:
        print("空间有限,不存0")
    else:
        spend.append(content[1:])
        deposit+=value

print(income)
print(spend)
print(deposit)

在这里插入图片描述
使用序列化:

import pickle

fp = open("f:\\a.txt","rb")
try:
    income=pickle.load(fp)
    spend=pickle.load(fp)
    deposit=pickle.load(fp)
except:
    income = []
    spend = []
    deposit = 0
fp.close()


#value|specification
while 1:
    content = input("请输入指令:")
    if content.find("exit")!=-1:
        break
    if content.find("|")==-1:
        print("data format is value|specification")
        print("please input again!")
        continue

    value = content.split("|")[0]
    try:
        value=float(value)
    except:
        print("data format is value|specification")
        print("data format is value must be a number")

    if value>0:
        income.append(content)
        deposit+=value
    elif value==0:
        print("空间有限,不存0")
    else:
        spend.append(content[1:])
        deposit+=value

print(income)
print(spend)
print(deposit)

fp = open("f:\\a.txt","wb")
pickle.dump(income,fp)
pickle.dump(spend,fp)
pickle.dump(deposit,fp)

fp.close()

在这里插入图片描述
练习:
处理数据文件:
每行内容需要生成以每行首年月日为名称的文件,
文件内容写入|0|后的所有行内容(也包括|0| )

数据文件:data.log
20160215 000148|0|collect info job start|success|

20160215000153|0|collect info job
end|success|resultcode = 0000

20160216000120|0|collect info job start|success|

20160216000121|0|collect info job
end|success|resultcode = 0000

20160217000139|0|collect info job start|success|

20160217000143|0|collect info job
end|success|resultcode = 0000

算法分析:
➢遍历每一行,每行取头14个字母
➢新建文件,文件名为首14个字母,然后把第15字符后的所有字
符拷贝到文件中
➢关闭文件

with open("f:\\a.txt",encoding="utf-8") as fp:
    for line in fp:
        print(line)
        file_name = line.split("|",1)[0]
        file_content = line.split("|",1)[1]
        with open("f:\\"+file_name+".txt","w") as fp1:
            fp1.write("|"+file_content+"\n")


在这里插入图片描述
怎么判断一个字符串是文件还是目录:
import os.path
os.path.isdir(“workspace”)
True
os.path.isfile(“workspace”)
False
在这里插入图片描述
小练习:删除你某个路径下文件名为.txt的所有文件。

 import os
 os.getcwd()
 dir_path = os.getcwd()
 for i in os.listdir(dir_path):
     print(dir_path+"\\"+i)
     if ".txt" == i[-4:]:
         os.remove(dir_path+"\\"+i)
         

在这里插入图片描述
练习:
取出某个目录内1小时内新建的所有的文件名。
算法:遍历这个目录,取到所有的文件
每个文件用stat取到创建时间
用创建时间和当前时间去比对,是否小于3600s
放到一个列表里面

import os
import time
import os.path
current_timestamp = time.time()
result = []
for i in os.listdir("f:\\"):
    if os.path.isfile("f:\\"+i):
        if current_timestamp-os.stat("f:\\"+i).st_ctime <=3600:
            result.append("f:\\"+i)

print(result)

在这里插入图片描述
小练习:
把所有的txt文件干掉,新建一个空的子目录xxx,放在某个层级下,把它删掉。

import os
dir_count = 0
file_count = 0
for root,dirs,files in os.walk("f:\\testdemo",topdown=True):
    print(u"当前目录:",root)#打印目录绝对路径
    for name in files:
        print(u"文件名:",os.path.join(root,name))#打印文件绝对路径
        if name[-4:]==".txt":
            os.remove(os.path.join(root,name))
        file_count+=1
    for name in dirs:
        print(u"目录名:",name)#打印目录绝对路径
        if name =="xxx":
            os.rmdir(os.path.join(root,name))
        dir_count+=1

print("目录个数%s"%dir_count)
print("文件个数%s"%file_count)

在这里插入图片描述
练习:统计某个路径下的绝对路径和绝对路径下的文件。

def get_dir_abs_dirpath(dir_path):
    result = []
    for root,dirs,files in os.walk(dir_path):
        for i in dirs:
            result.append(os.path.join(root,i))
    return result

def get_dir_abs_filepath(dir_path):
    result = []
    for root,dirs,files in os.walk(dir_path):
        for i in files:
            result.append(os.path.join(root,i))
    return result

print(get_dir_abs_dirpath("f:\\testdemo"))
print(get_dir_abs_filepath("f:\\testdemo"))

在这里插入图片描述
练习:统计下某个目录下的所有不同后缀名的个数以及哪些具体的后缀名。

def get_postfix_name_count(dir_path):
    result = []
    for root,dirs,files in os.walk(dir_path):
        for i in files:
            postfix_name = os.path.splitext(os.path.join(root,i))[1]
            print(postfix_name)
            if postfix_name!="":
                result.append(postfix_name[1:])
    return list(set(result)),len(set(result))

print(get_postfix_name_count("f:\\testdemo"))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值