重命名文件夹中的文件,然后将它们移动到另一个文件夹
rename files in a folder then move them to another folder
我在一个文件夹中有一堆文件都具有相同的扩展名:
[电影]快乐大脚2021-04-01 22-00-00.avi
[电影] 狗的生活 2021-06-01 22-03-50.avi
ETC
想将开始和结束重命名为:
快乐 feet.avi
狗 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"", 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"", 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()
功能。让我知道这是否有效。
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)
我在一个文件夹中有一堆文件都具有相同的扩展名:
[电影]快乐大脚2021-04-01 22-00-00.avi [电影] 狗的生活 2021-06-01 22-03-50.avi ETC 想将开始和结束重命名为: 快乐 feet.avi 狗 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"", 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"", 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()
功能。让我知道这是否有效。
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)