2017-05-16 50 views
0

所以我有一個文件名列表,像這樣:在文件名替換特定的字符時字符重複

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

而且我想在y1y更改爲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。我的問題是如何更改特定位置的文件名中的字符?

+0

使用'find'來獲得第二個'y';使用該索引根據需要替換字符。 – Prune

回答

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')) 
+0

這是做這件事的黑客方式。如果你總是有'_y'來處理,這可以很好地工作。並且字符串中永遠不會有另一個'_y'。 –

+0

非常真實,謝謝澄清。 –

0

您可以使用正則表達式。

import re 
s = 'gry_235545_y1.day' 
re.sub(r'_y(\d+)',r'_a\1',s) 
> 'gry_235545_a1.day' 
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)