большая операция поиска/замены?

У меня есть 265 CSV-файлов с более чем 4 миллионами записей (строк), и мне нужно выполнить поиск и замену во всех CSV-файлах. файлы. У меня есть приведенный ниже фрагмент моего кода PowerShell, который делает это, но для выполнения действия требуется 17 минут:

ForEach ($file in Get-ChildItem C:\temp\csv\*.csv) 
{
    $content = Get-Content -path $file
    $content | foreach {$_ -replace $SearchStr, $ReplaceStr} | Set-Content $file
}

Теперь у меня есть следующий код Python, который делает то же самое, но занимает менее 1 минуты:

import os, fnmatch

def findReplace(directory, find, replace, filePattern):
    for path, dirs, files in os.walk(os.path.abspath(directory)):
        for filename in fnmatch.filter(files, filePattern):
            filepath = os.path.join(path, filename)
            with open(filepath) as f:
                s = f.read()
            s = s.replace(find, replace)
            with open(filepath, "w") as f:
                f.write(s)

findReplace("c:/temp/csv", "Search String", "Replace String", "*.csv")

Почему метод Python намного эффективнее? Является ли мой код PowerShell неэффективным, или Python просто более мощный язык программирования, когда дело доходит до манипулирования текстом?

21
задан Keith 15 March 2012 в 17:38
поделиться