üzerinde çalışmış olan dizindeki dosyalar için yapın. Belirli dosya türlerini ararken bir dizinde gezinmek için os.walk kullanıyorum. Bir dosya türü bulunduğunda (örneğin .txt veya .xml), bu tanımı dizeleri değiştirmek için (old
diyelim) dosyadaki dizeleri bir sözlükten (new
olarak adlandırarak) kullanmak istiyorum. İlk baştaFileInput: Yedek dosyaları sadece
def multipleReplace(text, wordDict):
for key in wordDict:
text = text.replace(key, wordDict[key])
return text
, bu döngü vardı.
myDict = #dictionary with keys(old) and values(new)#
home = #some directory#
for dirpath, dirnames, filenames in os.walk(home):
for Filename in filenames:
filename = os.path.join(dirpath, Filename)
if filename.endswith('.txt') or filename.endswith('.xml'):
with fileinput.FileInput(filename,inplace=True,backup='.bak') as file:
for line in file:
print(multipleReplace(line,myDict),end='')
Bu hızlı bir şekilde çalıştı ve içinde old
dizeleri bulundu her dosyada new
dizeleriyle old
dizeleri yerini alacak Ancak, sorunu Komutumda, her dosya için bir .bak dosyası oluşturup bunların içinde old
dizeleri bulunup bulunmadığına bakılmaksızın yatıyor.
Sadece .dizeleri içeren dosyalar için bir .bak dosyası oluşturmak istiyorum (yalnızca değiştirmenin yapıldığı dosyalar için). Ben newFiles.append(re.findall('\\b'+old+'\\b',line))
gibi sadece bu dosyalar için FileInput yöntemi kullanabilirsiniz bu şekilde bir şey kullanarak (old
dizeleri içeriyordu; böylece tüm dosyaları okuyup sadece eklemek çalıştı, ancak regex bakmak saatler sürüyor.
Bu çalıştı!:) –