2017-07-16 100 views
0

我那里面有父文件夹和子夫妇夹一个子文件夹名称重命名文件的上一级

parent: 
--subfolder1: 
-----folderinsidesubfolder1: 
-------file.tsv 
--subfolder2: 
-----folderinsidesubfolder2: 
-------file.tsv 

我所试图做的是改变一个水平之上,与文件夹名称file.tsv是subfolder1,subfolder2这样

parent: 
    --subfolder1: 
    -----folderinsidesubfolder1: 
    -------subfolder1.tsv 
    --subfolder2: 
    -----folderinsidesubfolder2: 
    -------subfolder2.tsv 

代码:

from os import walk, path, rename 
for dirpath, _, files in walk('pathto/parent'): 
    for f in files: 
     if f.endswith(".tsv"): 
      print rename(f, dirpath[-2]+ '.tsv') 

错误:

OSError: [Errno 2] No such file or directory 

这是做正确的方式?

+1

'dirpath'只是一个字符串,你需要把它分解'os.path中。拆分(dirpath)[ - 2]',但你是不是在文件的目录中工作,所以你需要'os.path.join()''的pathto/parent'用'dirpath' +'新filename'。 – AChampion

+0

@AChampion是这样的吗? '(F,path.join(dirpath,(dirpath)[ - 2] + '.tsv格式'))'?我想这仍然得到同样的错误'OSERROR:[错误2]没有这样的文件或directory' – sbradbio

回答

1

os.path.split()创建一个头部和尾部,所以你将需要划分两次获得祖父母目录,例如:

import os 
for dirpath, _, files in os.walk('pathto/parent'): 
    for f in files: 
     if f.endswith('.tsv'): 
      os.rename(os.path.join(dirpath, f), os.path.join(dirpath, os.path.split(os.path.split(dirpath)[0])[1] + '.tsv')) 
+0

这个作品,谢谢你的解释 – sbradbio