[使用for循环python重命名目录中的文件名

问题描述 投票:1回答:2

我有一个包含以下内容的文件夹:

  1. 一个名为:1_blocks的文件夹
  2. 按年份列出的19个csv文件列表:London_255_1999.csvLondon_255_2000.csv,…,London_255_2017.csv
  3. 另一个csv文件:London_xyz_combined_output_all_years.csv

[任务是使用for循环将仅以London_255_1999.csv,...,London_255_2017.csv开头的19个csv文件重命名为London_245_1999.csv,...,London_245_2017.csv(即,将给定的255替换为245文件名)。

这是我的代码。我不希望其他文件和文件夹重命名。仅上述19个文件。

path = r'A:\Engineering'

for f in os.listdir(path):
    if f.startswith("London_255") and not f.endswith('years.csv'): 
      f_name, f_ext = os.path.splitext(f)

      f_site, f_strings, f_year = f_name.split('_')

      f_strings='245'
      f_site=f_site
      f_year=f_year

      new_name = '{}_{}_{}{}'.format(f_site, f_strings, f_year, f_ext)

      os.rename(f,new_name)

[如果有的话,请提出最简单的重命名方法。我收到以下错误:

f_site, f_strings, f_year = f_name.split('_')
ValueError: not enough values to unpack (expected 3, got 2)
python file-rename
2个回答
1
投票

通过使用str.split('_')方法并将结果解压缩为正好3个变量的问题是,您必须保证要拆分的每个字符串中都恰好有两个下划线。


0
投票

我修改了您的代码,以使用正则表达式查找正确的文件格式,而忽略了您提到的最终csv。正确匹配后,它使用os和shutil内置库将csv文件重命名为您指定的新格式。

© www.soinside.com 2019 - 2024. All rights reserved.