Python 在文件名中重复某个字符时替换该字符

Python 在文件名中重复某个字符时替换该字符,python,operating-system,Python,Operating System,因此,我有一个文件名列表,如下所示: gry_235545_y1.day gry_234456_y1.day gry_233356_y1.day gry_232256_y2.day 我想将y1中的y更改为a。到目前为止,我已经: for r,d,f in os.walk(path): for n in f: if n.endswith(('sub', 'db')): pass else: if n[2][0

因此,我有一个文件名列表,如下所示:

gry_235545_y1.day
gry_234456_y1.day
gry_233356_y1.day
gry_232256_y2.day
我想将
y1
中的
y
更改为
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
时,这会将文件名中的
y
字符更改为
a
。我的问题是如何在特定位置更改文件名中的字符

您可以尝试将“y”改为“_y”,以便它专门替换_y”


可以使用正则表达式

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

这是我的方法,尽管它似乎比其他答案更长。我想很清楚发生了什么

  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)

使用
find
获取第二个
y
;使用该索引替换所需的字符。这是一种很有技巧的方法。如果您总是有
\u y
可供使用,则此功能可以正常工作。而且字符串中永远不会有另一个
\u y
  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)