使用python批量搜索/替换文件名

时间:2014-10-28 20:50:38

标签: list python-2.7 xlrd

我有:

  1. excel文件为A1:B2。
  2. 包含200个jpeg文件的文件夹。
  3. 我尝试使用Column A中的值搜索文件夹中的文件名,如果找到则将其替换为Column B中的值,而不更改文件夹中文件的扩展名。

    这里使用各种各样的滑板来做这件事却失败了。这是我的代码:

    import os
    import xlrd
    path = r'c:\users\c_thv\desktop\x.xls'
    #collect the files in fexceler
    path1 = r'c:\users\c_thv\desktop'
    data = []
    for name in os.listdir(path1):
      if os.path.isfile(os.path.join(path1, name)):
        fileName, fileExtension = os.path.splitext(name)
         if fileExtension == '.py':
           data.append(fileName)
    #print data
    #collect the filenames for changing
    book = xlrd.open_workbook(path)
    sheet = book.sheet_by_index(0)
    cell = sheet.cell(0,0)
    cells = sheet.row_slice(rowx=0,start_colx=0,end_colx=2)
    excel = []
    #collect the workable data in an list
    for cell in cells:
      excel.append(cell) 
    #print excel
    #compare list for matches
    for i,j in enumerate(excel):
      if j in data[:]:
        os.rename(excel[i],data[i])
    

1 个答案:

答案 0 :(得分:0)

print "Match found"之后尝试if j in data[:]:,以检查是否符合条件。我的猜测是没有匹配,因为列表data在python filemanes(if fileExtension == '.py')上已满,而您正在查找excel列表中的jpeg文件。 此外,old未定义。

编辑:

如果我理解正确,这可能会有所帮助:

import os, xlrd

path = 'c:/users/c_thv/desktop' #path to jpg files
path1 = 'c:/users/c_thv/desktop/x.xls'

data =[] #list of jpg filenames in folder

#lets create a filenames list without the jpg extension
for name in os.listdir(path):
    fileName, fileExtension = os.path.splitext(name)
    if fileExtension =='.jpg':
        data.append(fileName)


#lets create a list of old filenames in the excel column a

book = xlrd.open_workbook(path1)
sheet = book.sheet_by_index(0)
oldNames =[]
for row in range(sheet.nrows):
    oldNames.append(sheet.cell_value(row,0))


#lets create a list with the new names in column b
newNames =[]
for row in range(sheet.nrows):
    newNames.append(sheet.cell_value(row,1))


#now create a dictionary with the old name in a and the corresponding new name in b

fileNames = dict(zip(oldNames,newNames))

print fileNames

#lastly rename your jpg files

for f in data:
    if f in fileNames.keys():
        os.rename(path+'/'+f+'.jpg', path+'/'+fileNames[f]+'.jpg')