Python shutil move合并文件
嘿,我正在尝试使用shutil move函数以增量方式重命名目录中的一组文件。例如,将文件a.txt、b.txt、c.txt重命名为1.txt、2.txt、3.txt等等。现在,当我调用shutil.move函数时,它将获取所有文件并生成一个“1”文件。奇怪的是,当我打印出我创建的新路径时,它会很好地增加路径 这是我的密码:Python shutil move合并文件,python,file,rename,move,shutil,Python,File,Rename,Move,Shutil,嘿,我正在尝试使用shutil move函数以增量方式重命名目录中的一组文件。例如,将文件a.txt、b.txt、c.txt重命名为1.txt、2.txt、3.txt等等。现在,当我调用shutil.move函数时,它将获取所有文件并生成一个“1”文件。奇怪的是,当我打印出我创建的新路径时,它会很好地增加路径 这是我的密码: absWorkingDir = os.path.abspath('.') for file in os.listdir('.'): newFile = os.pa
absWorkingDir = os.path.abspath('.')
for file in os.listdir('.'):
newFile = os.path.join(absWorkingDir, file)
newPath = os.path.join(absWorkingDir, showName + " - s" + seasNum + \
"e%02d" % (os.listdir('.').index(file) + 1,))
print(newPath)
shutil.move(newFile, newPath)
感谢您的帮助。根据澄清,这将有助于您:
#!/usr/bin/env python
import os
import shutil
skip = ['py', 'pyc']
files = [f for f in os.listdir('.') if f.split('.')[-1] not in skip]
files.sort()
showName = "ASD"
seasNum = 1
episode = 1
for f in files:
ext = f.split('.')[-1]
shutil.move(f, "%s-S%02de%02d.%s"%(showName, seasNum, episode, ext))
episode+=1
注意列表理解中的条件
用法:
➜ ls
a.txt b.txt c.txt d.avi move.py
➜ python move.py
➜ ls
ASD-S01e01.txt ASD-S01e02.txt ASD-S01e03.txt ASD-S01e04.avi move.py
根据澄清,这将有助于您:
#!/usr/bin/env python
import os
import shutil
skip = ['py', 'pyc']
files = [f for f in os.listdir('.') if f.split('.')[-1] not in skip]
files.sort()
showName = "ASD"
seasNum = 1
episode = 1
for f in files:
ext = f.split('.')[-1]
shutil.move(f, "%s-S%02de%02d.%s"%(showName, seasNum, episode, ext))
episode+=1
注意列表理解中的条件
用法:
➜ ls
a.txt b.txt c.txt d.avi move.py
➜ python move.py
➜ ls
ASD-S01e01.txt ASD-S01e02.txt ASD-S01e03.txt ASD-S01e04.avi move.py
在设置newPath时,您不断更改并重新列出目录。很抱歉,您能详细说明一下@akg吗?我不希望每个文件都有一个新路径吗?我不认为我完全理解。在
newPath=
您使用os.listdir('.')
再次读取目录,但是在第二次迭代中,这将读取修改过的目录。哦,我现在明白了,我该如何解决这个问题?我曾经使用listdir来获取索引,因此我可以增加数字,但现在我想我又回到了平方一。您只需创建一个计数器并在循环中增加它。在设置newPath时,您不断更改并重新列出目录。很抱歉,您能否详细说明@akg?我不希望每个文件都有一个新路径吗?我不认为我完全理解。在newPath=
您使用os.listdir('.')
再次读取目录,但是在第二次迭代中,这将读取修改过的目录。哦,我现在明白了,我该如何解决这个问题?我用listdir来获取索引,这样我就可以增加数字,但现在我想我又回到了平方一。你可以简单地创建一个计数器,然后在循环中增加它。那么,对于插曲号,这是否总是从0开始?我猜我将不得不硬编码或为不同的文件扩展名接受用户输入?您可以在['mp4',avi',mpeg']中的if
部分使用f.split('.')[-1]而不是['txt',srt',py']
。我为你编辑了答案。我还将第一个num改为1:p这比我最初想象的要复杂得多。再过几个小时我下班回家的时候,我得看看这个。谢谢你的帮助,如果我有任何其他问题,我会发回。那么这会永远从第0集开始吗?我猜我将不得不硬编码或为不同的文件扩展名接受用户输入?您可以在['mp4',avi',mpeg']中的if
部分使用f.split('.')[-1]而不是['txt',srt',py']
。我为你编辑了答案。我还将第一个num改为1:p这比我最初想象的要复杂得多。再过几个小时我下班回家的时候,我得看看这个。谢谢你的帮助,如果我还有其他问题,我会发回的。