重复该字符时,替换文件名中的特定字符

时间:2017-05-16 19:13:33

标签: python operating-system

所以我有一个像这样的文件名列表:

gry_235545_y1.day
gry_234456_y1.day
gry_233356_y1.day
gry_232256_y2.day

我想将y中的y1更改为a。到目前为止,我有:

for r,d,f in os.walk(path):
    for n in f:
        if n.endswith(('sub', 'db')):
            pass
        else:
            if n[2][0] == 'y':
                print(n.replace('y', 'a'))

但是当我只想在扩展名之前更改y时,这会将所有文件名中的a字符更改为y。我的问题是如何在特定位置更改文件名中的字符?

3 个答案:

答案 0 :(得分:0)

您可以尝试将'y'更改为'_y',以便它专门替换_y#。

for r,d,f in os.walk(path):
    for n in f:
        if n.endswith(('sub', 'db')):
           pass
        else:
           if n[2][0] == '_y':
              print(n.replace('_y', 'a'))

答案 1 :(得分:0)

您可以使用正则表达式。

import re
s = 'gry_235545_y1.day'
re.sub(r'_y(\d+)',r'_a\1',s)
> 'gry_235545_a1.day'

答案 2 :(得分:0)

这是我的方法,即使它似乎比其他答案更长。我觉得很明白,发生了什么。

  filenames = ["gry_235545_y1.day", "gry_235555_y1.day", "gry_235522_y1.day" ]
  for file in filenames:
  first_word = file.split('_')[0]
  second_word = file.split('_')[1]
  y1_word = "a1"
  extenstion = file.split('.')[-1]
  new_file_name = "".join(first_word+"_"+second_word+"_"+y1_word+"."+extenstion)
  print(new_file_name)