2011-08-23 108 views
5

我有一些代码在文件名加载的末尾添加单词“_manual”.. 我需要更改脚本以便它删除文件名(ES)的最后两个字母,然后替换为_ES_手册 例如:AC-5400ES.txt - > AC-5400_ES_manual.txt使用python替换文件名字符

如何将该函数合并到此代码中?

folder = r"C:/Documents and Settings/DuffA/Bureaublad/test" 
import os # glob is unnecessary 
for root, dirs, filenames in os.walk(folder): 
    for filename in filenames: 
     fullpath = os.path.join(root, filename) 
     filename_split = os.path.splitext(fullpath) # filename and extensionname (extension in [1]) 
     filename_zero, fileext = filename_split 
     print fullpath, filename_zero + "_manual" + fileext 
     os.rename(fullpath, filename_zero + "_manual" + fileext) 
+1

你是指EN还是ES? – carlpett

+0

现有脚本有什么问题? – rocksportrocker

+0

我的意思是ES抱歉!脚本没有问题 - 但我需要合并替换目前在文件名中的ES!对不起,如果这是令人困惑! –

回答

10

试试这个:

import os 
pathiter = (os.path.join(root, filename) 
    for root, _, filenames in os.walk(folder) 
    for filename in filenames 
) 
for path in pathiter: 
    newname = path.replace('ES.txt', '_ES_manual.txt') 
    if newname != path: 
     os.rename(path,newname) 
+0

这也像一个魅力! - 如何选择一个答案,如果他们都工作? –

+0

我会接受这一个,因为它特别针对ES文件!谢谢! –

+0

@Alice Duff _hughdbrown_的代码仅适用于以'ES.txt'结尾的文件名。如果您只想更改这些文件名,这是正确的。我的代码更通用,它将在扩展前的最后2个字母处更改所有文件名。它可能发生,这不是你想要的,所以你可以upvote _hughdbrown_。但是你也可以考虑在我的代码中添加一个条件来选择要更改的文件名,因此我的代码更加通用和适应性强。你必须考虑和选择。 – eyquem

1

你可以这样做:

for filename in filenames: 
    print(filename) #should display AC-5400ES.txt 
    filename = filename.replace("ES.txt","ES_manual.txt") 
    print(filename) #should display AC-5400ES_manual.txt 
    fullpath = os.path.join(root, filename) 
    os.rename(fullpath, filename) 
+0

但我需要保留文件名“AC-5400ES”的beginng部分 - 这是否会为此工作? –

+0

@Alice Duff:是的,这个语句将取文件名字符串并替换“ES.txt”的每一处出现,并将其替换为“ES_manual.txt”。这是处理你描述的最基本的方式。如果你需要更复杂的东西,请告诉我们你想要的东西:) – JMax

+0

嗯..我试过这一切,一切都保持完全一样! –

3
for root, dirs, filenames in os.walk(folder): 
    to_write = ['root == %s\n' % root] 

    for filename in filenames: 
     filename_zero, fileext = os.path.splitext(filename) 
     newname = "%s_%s_manual%s" % (filename_zero[:-2],filename_zero[-2:],fileext) 

     tu = (os.path.join(root, filename), os.path.join(root, newname)) 

     to_write.append('%s --> %s\n' % tu) 
     os.rename(*tu) 

    print '\n'.join(to_write) 
+0

作品像一个魅力! –

+0

@爱丽丝达夫它是迷人的蛇!顺便说一句,我使用** to_write **对象来延迟打印块,所以一般执行速度更快 – eyquem

+0

好的谢谢你的提示! –

5

对于一个更广义的采取上hughdbrown的答案。此代码可用于删除任何特定字符或字符集。

import os 

paths = (os.path.join(root, filename) 
     for root, _, filenames in os.walk('C:\FolderName') 
     for filename in filenames) 

for path in paths: 
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory 
    newname = path.replace('#', '-') 
    if newname != path: 
     os.rename(path, newname)