Python 路径中文件夹中的文件中的深小写字母

Python 路径中文件夹中的文件中的深小写字母,python,linux,file,directory,lowercase,Python,Linux,File,Directory,Lowercase,好的,这就是问题所在,我一直在Windows(不是我的)下做一个项目,最后他们决定在Linux上有一个功能齐全的fork,主要问题是最初的程序员编写了regarless-the-cases,随意使用SuperCase o-lowercase打开和调用东西…疯狂…对吗?好吧,我设法制作了一个python3脚本,将所有案例放在文件夹和文件中,但我仍然必须修复文件中的所有更改,这意味着将所有更改保留在“内存”中,并检查项目中的所有文件并更新每个文件。好吧,它的效果差不多是95%,仍然有很多未更正的文件

好的,这就是问题所在,我一直在Windows(不是我的)下做一个项目,最后他们决定在Linux上有一个功能齐全的fork,主要问题是最初的程序员编写了regarless-the-cases,随意使用SuperCase o-lowercase打开和调用东西…疯狂…对吗?好吧,我设法制作了一个python3脚本,将所有案例放在文件夹和文件中,但我仍然必须修复文件中的所有更改,这意味着将所有更改保留在“内存”中,并检查项目中的所有文件并更新每个文件。好吧,它的效果差不多是95%,仍然有很多未更正的文件…我的脑袋现在找不到“为什么”,有什么建议吗

#/usr/bin/env python
导入操作系统
进口稀土
导入时间
导入字符串
导入模拟类型
导入子流程
keys=set()
def平坦(路径):
list=os.listdir(路径)
对于列表中的项目:
obj=os.path.normpath(路径+项目)
obj_new=os.path.normpath(path+item.lower())
如果os.path.isfile(obj):
键。添加(项)
如果项目=item.lower():
打印(“[是]”,对象“-->”,对象新)
操作系统更换(obj,obj_新)
其他:
打印(“[No]”,obj)
其他:
obj=obj+'/'
扁平(obj)
项目=项目+'/'
键。添加(项)
如果项目=item.lower():
打印(“[是]”,对象“-->”,对象新)
操作系统更换(obj,obj_新)
其他:
打印(“[No]”,obj)
def insidefix(路径、键):
list=os.listdir(路径)
对于列表中的项目:
obj=os.path.normpath(路径+项目)
如果os.path.isfile(obj):
(mime,enc)=mimetypes.guess_类型(obj)
零件=重新拆分(“\”,项目)
ext=零件[透镜(零件)-1]
如果是哑剧=无:
t=重新拆分('/',mime)
如果(t[0]=='text')|(集合中的ext):
打印('Fixing-->',obj',|',mime)
对于ref in键:
模式=“”
对于范围内的c(len(ref)):
如果(参考[c].isalpha()):
pattern=pattern+'['+ref[c].上()+ref[c].下()+']
其他:
模式=模式+参考[c]
arg='s |'+模式+'|'+参考值下限()+'| g'
子进程调用([“/bin/sed”、“-i”、arg、obj])
打印(“/bin/sed”、“-i”、arg、obj)
其他:
obj=obj+'/'
insidefix(obj,钥匙)
def运行时间(t):
h=m=s=0
对于范围(t)内的i:
如果s==60:
m+=1
s=0
如果m==60:
h+=1
m=0
s+=1
打印(h',:',m',:',s)
路径='/warehouse/projects/igp/'
set=['php','txt','css','log','sym','map','htm','thmx','xml','mht','ini','js','html','backup','qry','config','json']
begin=time.time()
平坦(小路)
打印(“**********************************************”)
对于k in键:
印刷品(k)
打印(“**********************************************”)
insidefix(路径、关键点)
end=time.time()
dif=结束-开始
最终=整数(dif)
运行时间(最终)

请分解您的问题

您可以自上而下或自下而上。我建议自下而上

也就是说,下降到叶目录,列出所有文件(1),在那里重命名这些文件。走出去,重命名那个叶目录。走出去

代码:

初始状态:

air:~ dima$ find testdir
testdir
testdir/lo.txt
testdir/lower
testdir/lower/lo1.txt
testdir/lower/UP1.txt
testdir/UP.txt
testdir/UPper
最后状态:

air:~ dima$ find testdir
testdir
testdir/lo.txt
testdir/lower
testdir/lower/lo1.txt
testdir/lower/up1.txt
testdir/up.txt
testdir/upper

(1) 您应该提前列出所有文件,即
list(os.scandir(…)
,因为您不想在读取目录时修改它。虽然在现代操作系统上这在技术上是安全的,但它可能导致神秘的逻辑错误。提示:重命名项目时,目录中项目的顺序可能会更改。

Brilliant solution!。。。它告诉我,我只是Python新手……但我仍然需要更新代码行中的引用(到新的文件夹名和文件名),不能手动完成,有太多的代码和太多的引用需要修复。我会尝试使用IDE来处理代码中的位。您可以记录所有重命名
FOO.H->FOO.H;有些DRR >某个DIR/<代码>然后在所有文件上使用“代码> SED<代码>,但也可以回火,如果C++和<代码>包括(没有<代码> h /代码>),或者如果您开始替换所有的代码> S/Fo/Fo/<代码>,很容易在代码<意外地替换第一个单词>定义FooWixMAX 123 < /C>
air:~ dima$ find testdir
testdir
testdir/lo.txt
testdir/lower
testdir/lower/lo1.txt
testdir/lower/up1.txt
testdir/up.txt
testdir/upper