【问题标题】:Rename files in a folder using Python, using name map from Excel使用 Python 重命名文件夹中的文件,使用 Excel 中的名称映射
【发布时间】:2019-05-03 06:35:32
【问题描述】:

我要重命名的文件夹中有许多 CSV 文件。有一个 Excel 表,其中包含要重命名为文件夹的文件名。

文件夹中的文件命名为

TestData_30April.csv

TestData_20April.csv

TestData_18April.csv etc

而 excel 工作表包含的名称为

0.25-TestData_30April.

0.98-TestData_20April

0.33-TestData_20April

我的目标是重命名

“TestData_30April.csv”到“0.25-TestData_30April.csv”

类似

"TestData_20April.csv" to "0.98-TestData_20April" etc.

我的问题定义与此类似 这是链接“使用 Python 重命名文件,使用 Excel 中的名称映射”

请帮助我是 python 新手。

这是代码,但它不起作用

import os

import xlrd

**#Excel Sheet containing name of files to be renamed in that folder**

path="C:\\Users\\Desktop\\Test_Data\\Test_Summary.xlsx"

wb = xlrd.open_workbook(path) 

sheet = wb.sheet_by_index(0)

sheet.cell_value(0, 0)

**#In excel sheet column X or col_values(23) contains the file name to be renamed**

print(sheet.col_values(23))  

new_names = sheet.col_values(23)

for new_name in sheet.col_values(23):



if '-' in new_name:

    old_name = new_name.split("-")[1]

    if os.path.isfile(os.path.join(dir, old_name)):

        os.rename(os.path.join(dir, old_name), os.path.join(dir, new_name))

请帮助我是 python 新手

【问题讨论】:

  • 你遇到了什么错误?
  • 我没有收到任何错误,但文件夹中的文件名没有重命名
  • 是csv中的文件名总是这样*.**-[].csv格式?
  • 文件夹中的文件名为 TestData_30April.csv ,TestData_20April.csv , TestData_18April.csv 这种格式。而在 Excel 工作表中,文件名是 0.25-TestData_30April、0.98-TestData_20April 、0.33-TestData_20April 都是这种格式。
  • prashant rana : 我想重命名文件夹中的文件,但要重命名的新文件名在 excel 表中可用(Column-X)

标签: python


【解决方案1】:
list_of_filename_in_folder = [] # name of the files in the folder
list_of_filename_in_excel = [] #name of the files in excel

path_to_folder = ''  # base path of folder  

for name in list_of_filename_in_excel:
    excel_file_name = os.path.join(path_to_folder, name,'.csv')
    dir_file_name = os.path.join(path_to_folder,name.split('-')[1],'.csv' )
    if os.path.exists(dir_file_name):
      print('changing file name {} to {}'.format(name.split('-')[1],name))
      os.rename(dir_file_name, excel_file_name)
    else:
      print('no file {} with name found in project location'.format(name.split('-')[1]+'.csv')

【讨论】:

  • Prashanth:在我运行脚本后,上面没有重命名文件夹中的文件
  • join() 参数必须是 str 或 bytes,而不是 'list' 是错误的
  • 您在列表中添加数据了吗?不知道你传的是什么数据,代码是正确的
  • 您能澄清一下我需要添加到该列表中的哪些数据吗?我的意思是我添加了 list_of_filename_in_folder = [dir path] 和 list_of_filename_in_excel = [excel path] resp。对吗??
  • list_of_filename_in_folder =['TestData_30April.csv' ,'TestData_20April.csv' , 'TestData_18April.csv'] list_of_filename_in_excel = [ '0.25-TestData_30April', '0.98-TestData_20April' ,'0.33-TestData_20April'] path_to_folder = C:\user\<username>\project`
【解决方案2】:

你的excel表格中的文件名不包含扩展名.csv,因此old_name是没有扩展名的文件名,而os.path.isfile检查完整的文件名,只有当文件名和扩展名都匹配时才返回true。

将扩展附加到您的 Excel 工作表并重试,它应该可以工作。

0.25-TestData_30April.csv
0.98-TestData_20April.csv
0.33-TestData_20April.csv

【讨论】:

  • 但是文件夹中的文件名和excel表中的名称是随机的
  • 只需将文件扩展名 .csv 包含在您的 Excel 工作表中的随机文件名中。
  • dir_file_name = os.path.join(path_to_folder,name.split('-')[1],'.csv' )
猜你喜欢
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 2018-08-21
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
相关资源
最近更新 更多