我有一些字符串看起来像: *.rem.1.gz 和 *.rem.2.gz
我想将其替换为 *.1.trim.gz 和 *.2.trim.gz
1 号文件和 2 号文件相互配对,我想创建一个单独的字符串来同时包含这两个文件。
import os
allfiles = os.listdir
pair = [x.replace("rem.(\d+)","(\d+).trim")for x in allfiles] ##obviously this doesn't work but just want to give an idea what I want to do!
感谢您的帮助!
import os
import re
def pair_and_rename_files(file_list):
"""将文件列表配对并重命名。
Args:
file_list: 文件列表。
Returns:
包含重命名文件对的列表。
"""
paired_files = []
for filename in file_list:
match = re.search(r'\.rem\.(\d+)\.gz$', filename)
if match:
number = match.group(1)
new_filename = filename.replace(f'.rem.{number}.gz', f'.{number}.trim.gz')
paired_files.append((filename, new_filename))
return paired_files
# 获取所有文件
allfiles = os.listdir()
# 配对和重命名文件
paired_files = pair_and_rename_files(allfiles)
# 打印配对的文件
for old_filename, new_filename in paired_files:
print(f'配对: {old_filename} 和 {new_filename}')
代码解释:
-
pair_and_rename_files(file_list)
函数: - 接受一个文件列表作为输入。
-
使用正则表达式
\.rem\.(\d+)\.gz$
查找以.rem.数字.gz
结尾的文件名。 - 如果找到匹配项,则提取数字并使用字符串格式化创建新的文件名。
-
将原始文件名和新文件名作为元组添加到
paired_files
列表中。 -
返回
paired_files
列表。 -
主程序部分:
-
使用
os.listdir()
获取当前目录中的所有文件。 -
调用
pair_and_rename_files()
函数来配对和重命名文件。 -
循环遍历
paired_files
列表,并打印每个配对的文件名。
示例用法:
如果
allfiles
包含以下文件:
file1.rem.1.gz
file2.rem.2.gz
other_file.txt
则输出将是:
配对: file1.rem.1.gz 和 file1.1.trim.gz
配对: file2.rem.2.gz 和 file2.2.trim.gz
注意:
此代码仅打印配对的文件名。要实际重命名文件,可以使用
os.rename(old_filename, new_filename)
函数。