我有一个包含以下内容的文件夹:
1_blocks
的文件夹London_255_1999.csv
,London_255_2000.csv
,…,London_255_2017.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)
通过使用str.split('_')
方法并将结果解压缩为正好3个变量的问题是,您必须保证要拆分的每个字符串中都恰好有两个下划线。
我修改了您的代码,以使用正则表达式查找正确的文件格式,而忽略了您提到的最终csv。正确匹配后,它使用os和shutil内置库将csv文件重命名为您指定的新格式。