昨天晚上用了5分钟时间让GPT 给我写了个修改文件名,自动把 文件里的括号和括号中文字都去掉的代码,用来处理网上下载的名字巨长的电子书。

它给我的第一版其实就完全可用了:

import os
import re

def remove_brackets_and_content(filename):
    return re.sub(r'\([^()]*\)', '', filename)

def rename_files_in_directory(directory_path):
    for root, dirs, files in os.walk(directory_path):
        for filename in files:
            new_filename = remove_brackets_and_content(filename)

            if new_filename != filename:
                old_filepath = os.path.join(root, filename)
                new_filepath = os.path.join(root, new_filename)
                os.rename(old_filepath, new_filepath)
                print(f"Renamed '{old_filepath}' to '{new_filepath}'")

if __name__ == "__main__":
    directory_path = "path/to/your/directory"  # 替换为您要操作的文件夹路径
    rename_files_in_directory(directory_path)

但是只能处理英文的括号。然后我又让它把文件名里by后面的内容(主要是作者信息)都去掉,这次就炸了。

import os
import re

def remove_brackets_and_content(filename):
    return re.sub(r'\([^()]*\)', '', filename)

def remove_by_and_following_content(filename):
    return re.sub(r'by.*', '', filename, flags=re.IGNORECASE)

def rename_files_in_directory(directory_path):
    for root, dirs, files in os.walk(directory_path):
        for filename in files:
            new_filename = remove_brackets_and_content(filename)
            new_filename = remove_by_and_following_content(new_filename)

            if new_filename != filename:
                old_filepath = os.path.join(root, filename)
                new_filepath = os.path.join(root, new_filename)
                os.rename(old_filepath, new_filepath)
                print(f"Renamed '{old_filepath}' to '{new_filepath}'")

if __name__ == "__main__":
    directory_path = "path/to/your/directory"  # 替换为您要操作的文件夹路径
    rename_files_in_directory(directory_path)

这个一运行,文件扩展名也没了。有让它写个代码,把没扩展名的加上.pdf,还好这个文件夹里只有pdf文件。

最后让它加了个功能,在判断括号的时候连中文括号和方括号一起加进判断里。并且确保不会删除扩展名。最后得到了下面这段代码

import os
import re

def remove_brackets_and_content(filename):
    return re.sub(r'\([^()]*\)|\{[^{}]*\}|\[[^\[\]]*\]|([^()]*)', '', filename)

def remove_by_and_following_content(filename):
    file_root, file_ext = os.path.splitext(filename)
    file_root = re.sub(r'by.*', '', file_root, flags=re.IGNORECASE)
    return file_root + file_ext

def add_pdf_extension_if_missing(filename):
    if not os.path.splitext(filename)[1]:
        return filename + '.pdf'
    return filename

def rename_files_in_directory(directory_path):
    for root, dirs, files in os.walk(directory_path):
        for filename in files:
            new_filename = remove_brackets_and_content(filename)
            new_filename = remove_by_and_following_content(new_filename)
            new_filename = add_pdf_extension_if_missing(new_filename)

            if new_filename != filename:
                old_filepath = os.path.join(root, filename)
                new_filepath = os.path.join(root, new_filename)
                os.rename(old_filepath, new_filepath)
                print(f"Renamed '{old_filepath}' to '{new_filepath}'")


if __name__ == "__main__":
    directory_path = "path/to/your/d

结合之前使用的一些经验,目前有这样一些想法:

1、GPT是非常强大的辅助工具,能够解决很多具体的问题,节约大量时间。但是距离让一个完全没有编程知识的人直接用自然语言写出代码,还有很长的距离。在其他学科领域也是差不多的道理,使用者本身的学科知识能力,决定了你能用它发挥多大的作用。

2、人工智能一定会犯错,这个是使用人工智能时候的第一准则。

3、目前来看,想用GPT-4或者类似的大语言工具帮你写程序,至少得像我这种能看得懂一些代码,但是没有实际开发经验。它能够直接生成一个可用的框架,我可以不断要求它去挑整和扩充,比上网找到别人的代码再修改,效率高了很多。

4、从编程的角度来说,学编程不是没有用了,而是更加重要了。完全不会编程的人,目前是没有办法和它沟通让它去写出可行的程序的。只是今后编程学习的方式和目的可能都会有革命性的变化,从学会自己写代码写算法,转变成能够看懂代码,理解代码的逻辑,但是不一定需要自己能够完全写的出来。也就是人从实际的工作者,变成沟通需求和实现的桥梁,具体的实现工作可以交给人工智能。

5、无论是担心人工智能写出负责的系统程序的过于多虑了,目前它也就能写点简单的小工具。不过我认为这是一个非常重要的事情:计算机真正工具化的开始。使用计算机制造自己的工具来解决自己的小问题,而不是只能依赖于别人制作的工具。而且所需的编程能力和知识也大大减少了,我体验下来这是一个学过编程的高中生能够完成的。

6、你具备的开发和编程经验越多,在使用过程中会走的弯路越少。比如前面那个把文件扩展名删掉的问题,明显是我在给需求的时候没有描述清楚,也没有考虑到这种情况。其他学科同理,所以觉得有了人工智能就不用学相关内容的,要么是没用过要么是被误导了,人工智能只会让学习和学习能力更加的重要。