实践练习——python文件操作

练习1 (批量修改文件名)

题目要求:

运行程序之前

运行程序之后

 

下面为编写的代码,可供参考:

import os
def modify_filename(dirname):
    """
    :param dirname: 操作的目录
    :return:
    """
    # 1. 判断查找的目录是否存在, 如果不存在, 显示报错
    if not os.path.exists(dirname):
        print("Error: 目录%s不存在" % (dirname))
    # 2. 如果文件存在,做如下操作:
    else:
        # 2-1). 列出指定目录的所有文件名;
        filenames = os.listdir(dirname)
        # 2-2). 依次遍历目录的每一个文件;
        for filename in filenames:
            new_filename = "[西部开源]-" + filename
            full_old_filename = os.path.join(dirname, filename)
            full_new_filename = os.path.join(dirname, new_filename)
            # 2-3). 重命名
            os.rename(full_old_filename, full_new_filename)
            print("重命名【%s】 为【%s】成功!" % (filename, new_filename))

modify_filename('img')

运行程序后,输出为:


练习2 无重复字符的最长子串

题目要求如下:

有两种解决思路:

第一种:暴力破解法

第二种:滑动窗口

维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的大小,窗口不停的向右滑动。

  1. 如果当前遍历到的字符从未出现过,那么直接扩大右边界;
  2. 如果当前遍历到的字符出现过,则缩小窗口(左边索引向右移动),然后继续观察当前遍历到的字符;
  3. 重复1、2,直到左边索引无法再移动;
  4. 维护一个结果res,每次用出现过的窗口大小来更新结果res,最后返回res获取结果。

编写代码如下,可供参考:

def longest_str(str):
    window = str[0]
    res = 1
    l = len(str)
    for letter in str[1:l+1]:
        if letter not in window:
            window  +=  letter
            res += 1
        else:
            new_window = window[1:len(window)+1]
            if letter in new_window:
                new_window = new_window[1:len(window) + 1]
            else:
                new_window = window[1:len(window) + 1] + letter
    return res

print(longest_str('abcabcbb'))

输出结果为:


练习3

读取一个文件,显示除了以井号(#)开头的行以外的所有行。

代码如下,可供参考:

import os
def unsign_file(filename):
    f = open(filename,'r')
    content = f.readlines()
    for i in content:
        i.strip(" ")
        if i[0] == '#':
           continue
        else:
            print(i)

unsign_file('passwd')

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值