在 Python 中重命名文件时如何停止命名冗余?
How can I stop naming redundancies while renaming files in Python?
我正在尝试使用 Python 重命名一组 .txt 文件。我可以成功地将文件重命名为新的所需命名约定,但如果脚本多次获得 运行 或者如果目录中的某些文件已经使用正确的命名约定,文件名开始变得多余。到目前为止,这是我在这个过程中的代码。
os.chdir('C:\Users\Phillip\Circuit_generation\Automation\Test_files\')
sc_files = glob.glob('*sc.txt')
print('All netlist files ending with a series capacitor:')
for file_name in sc_files:
order = int(file_name.count('sc') + file_name.count('sl') + file_name.count('pc') + file_name.count('pl'))
old_name = file_name
new_name = 'Order_{}_{}'.format(order, old_name)
if os.path.isfile(new_name):
pass
else:
os.rename(old_name, new_name)
print(new_name)
脚本正在搜索目录并查找以特定文本结尾的所有文件。然后我尝试遍历所有符合该条件的文件。计算电路的阶数。我记录当前文件名然后定义一个新名称。
我想要的是以这样一种格式结束文件:
Order_5_sc_pl_sl_pc_sc
但是,如果此脚本 运行 不止一次或文件已经符合此命名约定,我将开始获取文件名,例如:
Order_5_Order_5_sc_pl_sl_pc_sc
Order_5_Order_5_Order_5_sc_pl_sl_pc_sc
我已经尝试检查旧名称是否与新命名约定匹配,如果名称已经是正确的格式则通过,但我无法解决问题。这段代码是我最近尝试阻止文件被错误命名的尝试。我认为这次尝试失败了,因为我并没有真正允许旧名称与新名称匹配,但我似乎找不到解决方案。我也尝试了以下但得到了类似的结果:
print('All netlist files ending with a series capacitor:')
for file_name in sc_files:
order = int(file_name.count('sc') + file_name.count('sl') + file_name.count('pc') + file_name.count('pl'))
old_name = file_name
if os.path.isfile('Order_{}_{}'.format(order, old_name[8:])):
pass
else:
new_name = 'Order_{}_{}'.format(order, old_name)
os.rename(old_name, new_name)
print(new_name)\
我怎样才能只重命名需要重命名的文件,而不是继续创建冗长的冗余文件名?我不确定我做错了什么,非常感谢对此事的任何帮助。谢谢。
您能否提供一些您开始使用的文件名示例,以便我们帮助您?另外,请不要使用格式功能,现在大多数人都在使用 f-strings,而 "" 仅用于将多行合并为一行。
根据我从你的问题中得到的,这就是我想出的。我的代码的一个副作用可能是订单的顺序可以更改,即:“sc_pl_sl_pl_sc”到“Order_sc_pl_pl_sl_sc”
import os
def get_all_orders(file_name):
all_orders = []
orders_amount = 0
order_types = {"pl", "sl", "pc", "sc"}
for order_type in order_types:
order_type_amount = file_name.count(order_type)
all_orders += [order_type] * order_type_amount
return orders_amount, all_orders
for file_name in ["Order_5_sc_pl_sl_pc_sc", "sc_pl_sl_pc_sc"]:
if "Order_" not in file_name:
orders_amount, all_orders = get_all_orders(file_name)
new_filename = "Order_" + "_".join(all_orders)
if not os.path.isfile(new_filename):
# os.rename(file_name, new_name)
print(f"os.rename({file_name}, {new_filename})")
我正在尝试使用 Python 重命名一组 .txt 文件。我可以成功地将文件重命名为新的所需命名约定,但如果脚本多次获得 运行 或者如果目录中的某些文件已经使用正确的命名约定,文件名开始变得多余。到目前为止,这是我在这个过程中的代码。
os.chdir('C:\Users\Phillip\Circuit_generation\Automation\Test_files\')
sc_files = glob.glob('*sc.txt')
print('All netlist files ending with a series capacitor:')
for file_name in sc_files:
order = int(file_name.count('sc') + file_name.count('sl') + file_name.count('pc') + file_name.count('pl'))
old_name = file_name
new_name = 'Order_{}_{}'.format(order, old_name)
if os.path.isfile(new_name):
pass
else:
os.rename(old_name, new_name)
print(new_name)
脚本正在搜索目录并查找以特定文本结尾的所有文件。然后我尝试遍历所有符合该条件的文件。计算电路的阶数。我记录当前文件名然后定义一个新名称。
我想要的是以这样一种格式结束文件:
Order_5_sc_pl_sl_pc_sc
但是,如果此脚本 运行 不止一次或文件已经符合此命名约定,我将开始获取文件名,例如:
Order_5_Order_5_sc_pl_sl_pc_sc
Order_5_Order_5_Order_5_sc_pl_sl_pc_sc
我已经尝试检查旧名称是否与新命名约定匹配,如果名称已经是正确的格式则通过,但我无法解决问题。这段代码是我最近尝试阻止文件被错误命名的尝试。我认为这次尝试失败了,因为我并没有真正允许旧名称与新名称匹配,但我似乎找不到解决方案。我也尝试了以下但得到了类似的结果:
print('All netlist files ending with a series capacitor:')
for file_name in sc_files:
order = int(file_name.count('sc') + file_name.count('sl') + file_name.count('pc') + file_name.count('pl'))
old_name = file_name
if os.path.isfile('Order_{}_{}'.format(order, old_name[8:])):
pass
else:
new_name = 'Order_{}_{}'.format(order, old_name)
os.rename(old_name, new_name)
print(new_name)\
我怎样才能只重命名需要重命名的文件,而不是继续创建冗长的冗余文件名?我不确定我做错了什么,非常感谢对此事的任何帮助。谢谢。
您能否提供一些您开始使用的文件名示例,以便我们帮助您?另外,请不要使用格式功能,现在大多数人都在使用 f-strings,而 "" 仅用于将多行合并为一行。
根据我从你的问题中得到的,这就是我想出的。我的代码的一个副作用可能是订单的顺序可以更改,即:“sc_pl_sl_pl_sc”到“Order_sc_pl_pl_sl_sc”
import os
def get_all_orders(file_name):
all_orders = []
orders_amount = 0
order_types = {"pl", "sl", "pc", "sc"}
for order_type in order_types:
order_type_amount = file_name.count(order_type)
all_orders += [order_type] * order_type_amount
return orders_amount, all_orders
for file_name in ["Order_5_sc_pl_sl_pc_sc", "sc_pl_sl_pc_sc"]:
if "Order_" not in file_name:
orders_amount, all_orders = get_all_orders(file_name)
new_filename = "Order_" + "_".join(all_orders)
if not os.path.isfile(new_filename):
# os.rename(file_name, new_name)
print(f"os.rename({file_name}, {new_filename})")