gpt4 book ai didi

Python - 使用操作系统重命名文件两次

转载 作者:行者123 更新时间:2023-12-01 09:06:47 27 4
gpt4 key购买 nike

我目前正在编写一个脚本,用于获取原始文本文件,根据版本号系统将它们放置在正确的年份文件夹中,并重命名它们,以便我们的开发人员可以轻松地将它们集成到我们的产品中。

相关文件名为 APR30CaseRVU-1Day.txt。我需要采用 refAPRCaseRVU-1Day.txt 的形式。

添加引用,删除 30,保留 1Day。

该脚本对于没有这个额外“1Day”的其他文件运行良好。我是初学者,所以我确信我的工作流程很糟糕,但我的想法是使用 os.rename 两次。一次删除字符,然后在连字符上拆分以将“1”添加回文件名中,但是当我在第一个 os.rename 之后打印文件名时,它仍然有 30 和 1。

有人有任何更有效地做到这一点的建议吗?

folder = r"C:\Users\xx\Desktop\Python Final Project\Raw"

import os
import re
import shutil
for root, dirs, filenames in os.walk(folder):
for filename in filenames:
srcpath = os.path.join(root, filename)
#split the filename so that we can rename accordingly below, filename_split[0] = filename, filename_split[1] = file ext
filename_split = os.path.splitext(filename)
name = filename_split[0]
ext = filename_split[1]
newfolder = ''
destpath = os.path.join(newfolder, "ref" + re.sub(r'\d', '', filename_split[0]) + filename_split[1])
#first step: remove AP files entirely from directory
if filename.startswith("AP27"):
os.remove(os.path.join(folder, filename))
#the rest include a version number that must be routed to the correct year folder directory created above
elif filename.__contains__("30") and filename.__contains__("Day"):
newfolder = r"C:\Users\xx\Desktop\Python Final Project\Raw\2013"
os.rename(os.path.join(root, filename),
os.path.join(newfolder, "ref" + re.sub(r'\d', '', filename_split[0]) + filename_split[1]))
print(filename)
day_name = re.split(r'[\s-]+', filename)
print(day_name)
first_name = day_name[0]
last_name = day_name[1]
os.rename(os.path.join(newfolder, filename),
os.path.join(newfolder, "ref" + first_name + '1' + last_name))

最佳答案

我自己解决了这个问题:

                os.rename(os.path.join(root, filename),
os.path.join(newfolder, "ref" + re.sub(r'\d{2}', '', name) + ext))

添加 {2} 使其查找 2 个连续的数字,而只保留 1。

谢谢!

关于Python - 使用操作系统重命名文件两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51976517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com