我想使用特定条件对文件夹中的一组文件进行批处理重命名,即(添加前缀,从特定编号开始,并以+1系列递增,跳过系列中的特定编号,添加具有相同编号的文件使用下划线)
我有一组扫描的文档文件,从指定的数字(例如10)开始,以1递增。例如10、11、12,...
。但是某些文件将丢失,例如13丢失,因此需要一个选项来跳过13并以14开头。另外一些文件将是2页,因此需要在下划线处加以区分。前15个文件为2页,因此第二个文件需要放置15_2。
UPDATE1:我已经修复了几乎所有内容,现在可以正常工作,但是现在我需要做两件事 1.需要一个while循环,以检查输入的跳过数字是否小于或等于x。
还有一些文件将是2页,因此需要在下划线处加以区分。前15个文件为2页,因此第二个文件需要放置15_2。
更新2:我添加了重复文件存在的条件,但语法错误如下 更新3:我的朋友帮助我摆脱了语法错误。
更新4:我的朋友提供了一些逻辑上的帮助,我已经解决了这个难题,此处更新以供参考。谢谢Jishnu
line 20
i -= 1 and dst = pre.upper() + str(i) + "_2.pdf"
import os
pre = str(input("Enter prefix : "))
while pre not in ("cin", "CIN", "CRT", "crt", "inv", "INV", "DO", "do"):
pre = str(input("Please check the entered prefix and try again : "))
x = int(input("Enter first no : "))
skip = int(input("Skip : "))
rt = int(input("Enter repeating number"))
rt = rt + 1
def main():
i = x
for filename in os.listdir("C:/Users/Ajeshhome/Desktop/scan/"):
if skip == i:
i += 1
dst = pre.upper() + str(i) + ".pdf"
src = 'C:/Users/Ajeshhome/Desktop/scan/' + filename
dst = 'C:/Users/Ajeshhome/Desktop/scan/' + dst
os.rename(src, dst)
i += 1
elif rt == i:
dst = pre.upper() + str(i-1) + "_2.pdf"
src = 'C:/Users/Ajeshhome/Desktop/scan/' + filename
dst = 'C:/Users/Ajeshhome/Desktop/scan/' + dst
os.rename(src, dst)
i += 1
else:
dst = pre.upper() + str(i) + ".pdf"
src = 'C:/Users/Ajeshhome/Desktop/scan/' + filename
dst = 'C:/Users/Ajeshhome/Desktop/scan/' + dst
os.rename(src, dst)
i += 1
def lis():
path = 'C:/Users/Ajeshhome/Desktop/scan/'
files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
for file in f:
if '.pdf' in file:
files.append(os.path.join(r, file))
for f in files:
print(f)
# Driver Code
if __name__ == '__main__':
# Calling main() function
main()
lis()
os.system('pause')
答案 0 :(得分:0)
我不确定如何解决您所询问的所有问题。但这是一个开始:可靠的前缀选择。这是整个代码:
PREFIXES = {
"CIN",
"CRT",
"DO",
"INV",
}
def ask_prefix():
prefixes = sorted(PREFIXES)
for i, prefix in enumerate(prefixes, start=1):
print(f'{i}) {prefix}')
while True:
reply = input('Select prefix: ').strip().upper()
try:
index = int(reply) - 1
except ValueError:
if reply in PREFIXES:
return reply
else:
if 0 <= index < len(prefixes):
return prefixes[index]
print(f'{reply!r} is not a valid prefix.')
pre = ask_prefix()
所有有效前缀的全局集:
PREFIXES = {
"CIN",
"CRT",
"DO",
"INV",
}
现在让我们看一下ask_prefix()
。第一行从PREFIXES
创建一个排序列表,因此它们以良好的顺序打印出来。然后:
for i, prefix in enumerate(prefixes, start=1):
print(f'{i}) {prefix}')
使用enumerate
为前缀编号,然后打印出数字和前缀以创建菜单。接下来,输入一个无限循环(while True:
),该循环仅在用户输入或选择有效前缀时才会中断。
从菜单中向用户询问前缀或数字,然后清理输入:
reply = input('Select prefix: ').strip().upper()
尝试将回复作为索引:
try:
index = int(reply) - 1
except ValueError:
...
else:
if 0 <= index < len(prefixes):
return prefixes[index]
如果它不能用作索引,请尝试将其作为前缀:
if reply in PREFIXES:
return reply