鱼C论坛

 找回密码
 立即注册
查看: 2220|回复: 5

[已解决]求代码更改,麻烦指教!

[复制链接]
发表于 2017-5-26 22:43:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面代码想更改文件扩展名,但只能更改当前目录下的文件,不能更改子目录下的文件,求指教

  1. # -*- coding: cp936 -*-
  2. import os
  3. a=input("更改前的扩展名:")
  4. b=input("更改后的扩展名:")
  5. files= os.listdir()
  6. for filename in files:
  7.        li=os.path.splitext(filename)
  8.        if li[1]==a:
  9.            newname=li[0]+b
  10.            os.rename(filename,newname)
复制代码
最佳答案
2017-5-26 23:52:07
本帖最后由 yongxi 于 2017-5-27 00:02 编辑

修改思路: 既然要改子目录,那么很有可能子目录里面还有N个子目录。所以最佳方式就是写一个递归函数解决问题
修改后如下:
  1. import os
  2. def change(mulu):
  3.     files= os.listdir(mulu)   # 获取当前层级目录文件名列表
  4.     for filename in files:
  5.         if os.path.isdir(mulu+'\\'+filename):  # 判断文件是否是一个目录
  6.             change(mulu+'\\'+filename)  #  如果是目录,则用该目录作为形参再次调用函数change
  7.         else: #如果不是目录,则改扩展名
  8.             li=os.path.splitext(filename)
  9.             if li[1]==a:
  10.                newname=li[0]+b
  11.                os.rename(mulu+'\\'+filename,mulu+'\\'+newname) # 修改的文件请加上完整的路径,不然提示找不到该文件
  12. ml_1 = os.getcwd()    #获取当前脚本所在目录
  13. a=input("更改前的扩展名:")
  14. b=input("更改后的扩展名:")
  15. change(ml_1)  #以当前脚本所在目录为形参调用函数change
复制代码


一:
写代码最好养成写注释的习惯。
二:
如若解惑,请给最佳评价,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-26 23:52:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 yongxi 于 2017-5-27 00:02 编辑

修改思路: 既然要改子目录,那么很有可能子目录里面还有N个子目录。所以最佳方式就是写一个递归函数解决问题
修改后如下:
  1. import os
  2. def change(mulu):
  3.     files= os.listdir(mulu)   # 获取当前层级目录文件名列表
  4.     for filename in files:
  5.         if os.path.isdir(mulu+'\\'+filename):  # 判断文件是否是一个目录
  6.             change(mulu+'\\'+filename)  #  如果是目录,则用该目录作为形参再次调用函数change
  7.         else: #如果不是目录,则改扩展名
  8.             li=os.path.splitext(filename)
  9.             if li[1]==a:
  10.                newname=li[0]+b
  11.                os.rename(mulu+'\\'+filename,mulu+'\\'+newname) # 修改的文件请加上完整的路径,不然提示找不到该文件
  12. ml_1 = os.getcwd()    #获取当前脚本所在目录
  13. a=input("更改前的扩展名:")
  14. b=input("更改后的扩展名:")
  15. change(ml_1)  #以当前脚本所在目录为形参调用函数change
复制代码


一:
写代码最好养成写注释的习惯。
二:
如若解惑,请给最佳评价,谢谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-29 23:19:34 | 显示全部楼层
yongxi 发表于 2017-5-26 23:52
修改思路: 既然要改子目录,那么很有可能子目录里面还有N个子目录。所以最佳方式就是写一个递归函数解决问 ...

非常完美,并且注释很详细。
如果想把更改后的文件放入当前目录下新建的new文件夹里,并且保留源文件,又该怎么改呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-30 16:21:26 | 显示全部楼层
本帖最后由 yongxi 于 2017-5-30 16:22 编辑
meiszp 发表于 2017-5-29 23:19
非常完美,并且注释很详细。
如果想把更改后的文件放入当前目录下新建的new文件夹里,并且保留源文件, ...


给你提供一个思路 。
检测到是一个文件的时候, 打开文件,复制文件内容,再新建一个文件,把内容拷贝进去。
记得完成操作要关闭这两个文件。

你先自己尝试   写不出来你再回复 我给你贴代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-1 21:28:53 | 显示全部楼层
yongxi 发表于 2017-5-30 16:21
给你提供一个思路 。
检测到是一个文件的时候, 打开文件,复制文件内容,再新建一个文件,把内容拷贝 ...

新建的文件应该放到哪?
为什么要打开复制内容,而不是复制整个文件到new文件夹,然后对new里面的所有文件进行更改。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-1 22:48:06 | 显示全部楼层
本帖最后由 yongxi 于 2017-6-1 22:54 编辑
meiszp 发表于 2017-6-1 21:28
新建的文件应该放到哪?
为什么要打开复制内容,而不是复制整个文件到new文件夹,然后对new里面的所有文 ...



你也可以直接复制文件 。
shutil 模块
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-27 18:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表