我有一个包含多个文件的文件夹作为一个示例,我有多个不同的
_EGAZ00001018697_2014_ICGC_130906_D81P8DQ1_0153_C2704ACXX.nopd.AOCS_001_ICGCDBDE20130916001.rsem.bam
现在我想重命名然后只使用ICGCDBDE20130916001.rsem.bam
将根据路径中的文件进行更改。对应于名称* .rsem.bam的字符串应该是由" _"分隔的字符串。因此,目录中的所有文件都应该相应地替换。我想使用正则表达式,所以我提出了以下模式
pat=r'_(.*)_(.*)_(.*)_(.*)_(.\w+)'
这会根据需要分离我的文件名,我可以使用全局变量重命名文件名,我只使用pat[4]
。我想使用python,因为我现在想要学习它,以便在文件重命名等方面进行小的更改,然后在python中转换我的工作流程。我无法做到。我应该如何在python中完成这项工作?另外我应该修复相应的bash正则表达式,因为这个是一个非常大的文件名,我遇到的这个是非常新的。下面是我的代码不要直接更改,但要了解它是否有效,但如果我想重命名它们应该如何使它工作。
import re
import os
_src = "path/bam/test/"
_ext = ".rsem.bam"
endsWithNumber = re.compile(r'_(.*)_(.*)_(.*)_(.*)_(.\w+)'+(re.escape(_ext))+'$')
print(endsWithNumber)
for filename in os.listdir(_src):
m = endsWithNumber.search(filename)
print(m)
我会很高兴在python和bash中,但是,我更喜欢python用于我自己的理解和未来的学习。
答案 0 :(得分:1)
工作太多了。
newname = oldname.rsplit('_', 1)[1]
答案 1 :(得分:1)
您可以使用列表理解
import re
import os
_src = "path/bam/test/"
new_s = [re.search("[a-zA-Z0-9]+\.rsem\.bam", filename) for filename in os.listdir(_src)]
for first, second in zip(os.listdir(_src), new_s):
if second is not None:
os.rename(first, second.group(0))
答案 2 :(得分:1)
你可以使用rpartition
将你想要的部分从剩下的部分分成三部分元组。
假设:
>>> fn
'_EGAZ00001018697_2014_ICGC_130906_D81P8DQ1_0153_C2704ACXX.nopd.AOCS_001_ICGCDBDE20130916001.rsem.bam'
你可以这样做:
>>> fn.rpartition('_')
('_EGAZ00001018697_2014_ICGC_130906_D81P8DQ1_0153_C2704ACXX.nopd.AOCS_001', '_', 'ICGCDBDE20130916001.rsem.bam')
然后:
>>> _,sep,new_name=fn.rpartition('_')
>>> new_name
'ICGCDBDE20130916001.rsem.bam'
如果你想使用正则表达式:
>>> re.search(r'_([^_]+$)', fn).group(1)
'ICGCDBDE20130916001.rsem.bam'
实际上,在使用group(1)之前,您将测试是否存在匹配:
>>> m=re.search(r'_([^_]+$)', fn)
>>> new_name = m.group(1) if m else fn
对于sed
,你可以这样做:
$ echo "$fn" | sed -E 's/.*_([^_]*)$/\1/'
ICGCDBDE20130916001.rsem.bam
或者在Bash中,同样的正则表达式:
$ [[ $fn =~ _([^_]*)$ ]] && echo "${BASH_REMATCH[1]}"
ICGCDBDE20130916001.rsem.bam
答案 3 :(得分:-1)
import os
fname = 'YOUR_FILENAME.avi'
fname1 = fname.split('.')
fname2 = str(fname1[0]) + '.mp4'
os.rename('path to your source file' + str(fname), 'path to your destination file' + str(fname2))
fname = fname2