重命名文件夹中的文件,然后将它们移动到另一个文件夹

问题描述

我在一个文件夹中有一堆文件都具有相同的扩展名:

[电影] 快乐的脚 2021-04-01 22-00-00.avi [电影] 狗的生活 2021-06-01 22-03-50.avi 等等 想将开始和结束重命名为: 快乐的脚.avi 狗的生活.avi 等

这是我目前所拥有的:

import shutil
import os

source_dir = r"C:\\Users\\ED\\Desktop\\testsource"
target_dir = r"C:\\Users\\ED\\Desktop\\testdest"
data = os.listdir(source_dir)

print(data)

new_data = [file[8:].split(' 2021')[0] + '.txt' for file in data]

print(new_data)


for file in data:
    os.replace(data,[file[8:].split(' 2021')[0] + '.txt')


for file_name in data:
    shutil.move(os.path.join(source_dir,file_name),target_dir)

我打印出来后遇到了 os.rename() 部分的问题。

解决方法

如果您使用的是 r"foobar",我认为您不必转义 \s,对吗?

应该是这样

source_dir = r"C:\Users\ED\Desktop\testsource"
target_dir = r"C:\Users\ED\Desktop\testdest"
,

您可以使用(已测试):

from glob import glob
import re
import shutil
import os

src = "C:/Users/ED/Desktop/testsource"
dst = "C:/Users/ED/Desktop/testdest"

for f in glob(f"{src}/**"):
    fn = os.path.basename(f) 
    new_fn = re.sub(r"^\[.*?\](.*?) \d{4}-\d{2}-\d{2} \d{2}-\d{2}-\d{2}(\..*?)$",r"\1\2",fn).strip()
    shutil.move(f,f"{dst}/{new_fn}")  

对于python 2:

for f in glob(src+"/**"):
    fn = os.path.basename(f) 
    new_fn = re.sub(r"^\[.*?\](.*?) \d{4}-\d{2}-\d{2} \d{2}-\d{2}-\d{2}(\..*?)$",dst+"/"+new_fn)  
,

因此,代码存在一些问题。

foros.replace() 循环中,您将 data 的整个列表作为 src 传递,即 ['Dogs Life 2021-06-01 22-03-50.avi','2021-04-01 22-00-00.avi']

我所做的是在循环中使用 file

同样使用 os.replace(data,[file[8:].split(' 2021')[0] + '.txt') 语句,您在 os.replace() 中的变量将是一个列表项,因此我将其更改为字符串。

最后一件事是,除非文件在当前工作目录中,否则您需要使用 os.move() 中的完整文件路径

我没有触及 shutil.move() 函数。让我知道这是否有效。

import shutil
import os

source_dir = r"C:\\Users\\ED\\Desktop\\testsource"
target_dir = r"C:\\Users\\ED\\Desktop\\testdest"
data = os.listdir(source_dir)

print(data)

new_data = [file[8:].split(' 2021')[0] + '.txt' for file in data]

print(new_data)


for file in data:

    os.replace('C:\\Users\\ED\\Desktop\\testsource\\'+str(file),'C:\\Users\\ED\\Desktop\\testsource\\'+str(file[8:].split(' 2021')[0] + '.txt'),src_dir_fd=None,dst_dir_fd=None) 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...