Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python shutil move合并文件_Python_File_Rename_Move_Shutil - Fatal编程技术网

Python shutil move合并文件

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

嘿,我正在尝试使用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.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这比我最初想象的要复杂得多。再过几个小时我下班回家的时候,我得看看这个。谢谢你的帮助,如果我还有其他问题,我会发回的。