Python - 文件操作练习

#记录python学习中心得体会

实验一:访问指定目录统计各个类型文件个数

import os
import os.path

def countFile(pathh):
    all_file = os.listdir(pathh)
    type_dict = dict()

    for each_file in all_file:
        each_file = os.path.join(pathh,each_file)
        if os.path.isdir(each_file):
            type_dict.setdefault('文件夹',0)
            type_dict['文件夹'] += 1
        else:
            ext = os.path.splitext(each_file)[1]
            type_dict.setdefault(ext,0)
            type_dict[ext] += 1

    for each_type in type_dict.keys():
        print('该文件夹下共有类型【%s】的文件%d个'%(each_type,type_dict[each_type]))

countFile('E:\\')

心得:
1.选择合适的类型存储很方便,选择字典,key为文件类型,value为数量。在思考的时候数据操作应该选择合适的结构,往往会事半功倍。
2.在没有学习遍历的时候,递归访问文件夹以及子目录下的所有文件。
3.在被listdir分解后得到的列表中的值是文件名,不能用于判断是否为文件夹,会判断永远都不是文件夹,在判断需要用join讲路径与文件名连接。

实验二: 用户输入内容,保存到某文件。

def file_write(file_name):
    f = open(file_name,'w')
    print("请输入内容【单独输入\' :q \' 保存退出】")

    while True:
        file_content = input()
        if file_content != ':q':
            f.write("%s\n" % file_content)
        else:
            break
    f.close()

def file_write2(file_name,stopword):
    f = open(file_name,'w')
    print("请输入内容【单独输入\' %s \' 保存退出】" %stopword)

    file_connent = ''
    for line in iter(input,stopword):
        file_connent = file_connent + line + "\n"
    
    #输出到文件f
    print(file_connent,file=f)
    f.close()

file_name = input("请输入文件名:")
stopword = input("请输入结束标志:")
##file_write(file_name)
file_write2(file_name,stopword)

心得:
1:input 内容不能换行,换行符是input函数默认结束方式,两种方式解决问题。(1)结束符号换成用户指定的符号 (2)输入换行符后不让其结束, (1)方法用到iter函数改变其结束符号
#插曲
iter函数
iter 有两个参数
没有第二个参数,第一个参数是支持迭代的序列对象或者集合对象
有第二个参数,第一个参数是可调用对象,调用对象没有参数,当返回值为第二个参数时,停止调用抛出异常,否则返回当前值
(2)在一个永远不结束的循环中,只要输入内容不等于指定结束符号就不退出。
2. print 参数 file 指输出到指定文件

实验三:查找目标目录下在所有txt文件中查找关键字,并显示出现在第几行什么位置

import os
def findFile(Sdir,target):

    os.chdir(Sdir)
    row = 0

    for each_file in os.listdir(os.curdir):
        if os.path.splitext(each_file)[1] == '.txt':
            f = open(each_file,'r')
            for each_line in f:
                row += 1
                temp = each_line.find(target)
                if temp != -1:
                    print(os.getcwd() + os.sep + each_file)
                    print("出现在%d行,第【%d,%d】"%(row,temp,temp+5) + '\n')
            row = 0

        if os.path.isdir(each_file):
            findFile(each_file,target)
            os.chdir(os.pardir)


Sdir = input("请输入待查找的初始目录  ")
target = input("搜索的关键字  ")

findFile(Sdir,target)

心得:
1.这里原来是出现了一处逻辑错误,后来结果看出来了,幸好不然我应该不会在深入整个函数过程。检查函数逻辑思路很有必要。减少逻辑错误
2.在字符串计算中,中文和英文都是占1个字节,难以致信
3.os.sep 表示当前操作系统路径符号

最大体会:了解方法的返回值是什么很重要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值