【无标题】

find函数查找元素时,当列表中没有要找的元素时返回-1。

如下,在new_name函数中,当flag==‘1’即往后删时,如果PDF的名字中没有该特殊符号,PDF的名字后缀就会变成.pd.pdf,一开始不知道问题在哪,后面查查找找才知道当列表中没有要找的元素时返回-1,所以名字才会变成.pd.pdf,而flag==‘0’即往前删的情况由于在后面加了1,所以-1+1=0,index=0就会返回[0:]即整个列表(属于是瞎猫碰到死耗子了)

还有一个问题就是中文的破折号,往后删没有问题,但是往前删时还会留下一半破折号,类似于这样:abc——123.pdf往前删之后变成了—123.pdf,这个破折号可能是占了两个位置,于是就在filename.find(symbol)后面加2,结果又忘了区分名字中没有破折号的情况,后面加了个条件语句进行区分

import os
import sys
import tkinter as tk
from tkinter import messagebox

def new_name(filename, flag:str, symbol:str):
    l = len(filename)
    if flag == '0':
        if symbol == '——' and symbol in filename:
            index1 = filename.find(symbol) + 2
            filename = filename[index1:]
        else:
            index2 = filename.find(symbol) + 1
            filename = filename[index2:]
        return filename
    else:
        if symbol in filename:
            index = filename.find(symbol)
            result = ''
            parts = filename.rsplit('.', 1)
            if len(parts) == 2:
                result = '.' + parts[1]
            filename = filename[:index] + result
            return filename
        else:
            return filename

def rename_files(path, file_type, flag, symbol):
    files = os.listdir(path)
    for file in files:
        if file.endswith(file_type):
            old_path = os.path.join(path, file)
            new_filename = new_name(file, flag, symbol)
            new_path = os.path.join(path, new_filename)
            try:
                os.rename(old_path, new_path)
            except Exception as e:
                messagebox.showerror('错误', f'重命名文件失败:请检查改名后是否会重名')
                return False
    return True

def main():
    if hasattr(sys, 'frozen'):
        path = os.path.dirname(sys.executable)
    elif __file__:
        path = os.path.dirname(os.path.abspath(__file__))
    file_type = '.pdf'  # 可修改为需要处理的文件类型

    flag = flag_var.get()
    symbol = symbol_var.get()

    if not flag or not symbol:
        messagebox.showwarning('警告', '请选择有效的删减标志和符号')
        return

    if not rename_files(path, file_type, flag, symbol):
        messagebox.showerror('错误', '批量改名失败')
    else:
        messagebox.showinfo('成功', '批量改名完成')

root = tk.Tk()
root.title('第三方PDF报告单文件名批量修改程序')

label1 = tk.Label(root, text='请选择:')
label1.grid(row=0, column=0)
label2 = tk.Label(root, text='请选择符号:')
label2.grid(row=1, column=0)

flag_var = tk.StringVar()
flag_var.set(0)
symbol_var = tk.StringVar()
symbol_var.set('_')

flag_radio1 = tk.Radiobutton(root, text='往前删', variable=flag_var, value='0')
flag_radio2 = tk.Radiobutton(root, text='往后删', variable=flag_var, value='1')
flag_radio1.grid(row=0, column=1, padx=10, pady=5)
flag_radio2.grid(row=0, column=2, padx=10, pady=5)

symbol_radio1 = tk.Radiobutton(root, text='_英文下划线', variable=symbol_var, value='_')
symbol_radio2 = tk.Radiobutton(root, text='-英文横杠', variable=symbol_var, value='-')
symbol_radio3 = tk.Radiobutton(root, text='——中文破折号', variable=symbol_var, value='——')
symbol_radio4 = tk.Radiobutton(root, text='空格', variable=symbol_var, value=' ')
symbol_radio1.grid(row=1, column=1, padx=10, pady=5)
symbol_radio2.grid(row=1, column=2, padx=10, pady=5)
symbol_radio3.grid(row=1, column=3, padx=10, pady=5)
symbol_radio4.grid(row=1, column=4, padx=10, pady=5)

button = tk.Button(root, text='运行', command=main).grid(row=3, column=2, sticky=tk.W, padx=30, pady=5)

root.mainloop()

对了,之前还有一个问题就是转换成exe文件后读取不到当前目录下的路径,但是在脚本中运行的时候一切正常,一开始以为是打包软件的问题,但是我在网上找的程序可以正常运行,而且这个改名程序也可以正常弹出选项框,所以我猜它应该是正常运行的,所以我在想是不是它读取不到路径,然后去网上搜了一下,跟着找到的方法进行更改就能成功运行exe文件了

如下,将我原本写的这个换成了下面那个

path = os.path.split(os.path.realpath(__file__))[0]
if hasattr(sys, 'frozen'):
    application_path = os.path.dirname(sys.executable)
elif __file__:
    application_path = os.path.dirname(os.path.abspath(__file__))
  • os.path.dirname(path)表示去掉文件名,返回绝对路径
  • sys.executable结果为字符串,表示当前运行的可执行程序所在的绝对路径。
  • __file__表示当前文件的path 
  • os.path.abspath(_file_) 返回脚本的绝对路径

hasattr(sys, ‘frozen’):判断程序是Python脚本生成的exe文件,还是本地的Python脚本
当程序是Python脚本生成的exe文件,它会在sys模块中添加’frozen’属性。因此可以通过sys中是否含有’frozen’,来判断程序是不是exe文件
当程序是本地的Python脚本,__file__属性就能满足要求
如果是本地的Python脚本,返回的是python解析器python.exe的绝对路径
————————————————
这个路径问题的答案是从博主WarmOrange0那看到的,原文链接如下
原文链接:https://blog.csdn.net/m0_45176278/article/details/126959968

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值