如何删除文件夹中以特定条件(例如XXXX_job name.txt)开头的所有文件的前6个字符?

2024-06-25 23:58:00 发布

您现在位置:Python中文网/ 问答频道 /正文

******更新*******

这是我迄今为止编写的代码:

import os
import glob
import re
#from pathlib import Path
import sys

print("Welcome!")
path = r"D:\aerial_mbu\ForeFlight\ForeFlight Content Packs\OGLMissionsContentPack\layers"


files = os.listdir(path)
for name in files:
    if name.startswith("1"):
        new_name = name.replace(name[:6], "")
        print(new_name)
        os.rename(name, new_name)

不幸的是,它没有重命名文件,相反,我一直看到以下错误: enter image description here

我的os.rename调用似乎有问题,因为它正在打印正确的名称(新名称)

*******原职务******* 我正在寻找一种方法来重命名文件夹中的一些文件。有些文件名以6个附加数字开头,有些文件名不以6个附加数字开头。我想通过整个文件夹,并删除6个额外的数字从文件中有他们

当前文件夹示例:

1111_job_name1.txt
1112_job_name2.txt
1113_job_name3.txt
job_name4.txt
1115_job_name5.txt
job_name6.txt

所需文件夹示例:

job_name1.txt
job_name2.txt
job_name3.txt
job_name4.txt
job_name5.txt
job_name6.txt

我最初尝试在命令行中调用rename,但由于条件限制,我无法让它工作


Tags: 文件pathnameimporttxt文件夹newos
2条回答

如果字符串的数字为6个字符,则可以使用re进行匹配,如果不匹配,则计算结果为NULL,并且if中的语句不执行。它仅与start匹配,因为我们使用“^”

re.findall(r"^\d{6}",files). #here 6 denotes the number of digits it starts with

然后后来

re.sub(r"^\d{6}","",files)

您可以将那些匹配的字符替换为""->;到一个空字符串。有剥离。 所以你的代码是这样的

import os
import re
for files in os.listdir():
    if(re.findall(r"^\d{6}",files)):
        os.rename(files,re.sub(r"^\d{6}","",files))

我看到有一个“u”如果你想把它也去掉,你可以用这个 r"^\d{6}\_"作为重新表达。 如果您不想输入手边的位数,并且想删除以任意位数开头的文件,请使用此r"^[0-9]+\_"

下面是我根据这个article创建的脚本

# importing os module 
import os 

# Function to rename multiple files  def main(): 

    for  filename in enumerate(os.listdir("src/")): #src is the directory 
        dst =filename[5:]
        src = 'src/'+filename 
        dst = 'src/'+dst 

        # rename() function will 
        # rename all the files 
        os.rename(src, dst)    
# Driver Code  if __name__ == '__main__': 

    # Calling main() function 
    main()

相关问题 更多 >