繁体   English   中英

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

[英]rename files in a folder then move them to another folder

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

[电影] Happy feet 2021-04-01 22-00-00.avi [movie] Dogs Life 2021-06-01 22-03-50.avi 等想把开头和结尾重命名为:Happy feet.avi Dogs Life.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}(\..*?)$", r"\1\2", fn).strip()
    shutil.move(f, dst+"/"+new_fn)  

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

os.replace()for循环中,您将整个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() function。 让我知道这个是否奏效。

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) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM