我试图删除我的正则表达式匹配的所有行(正则表达式只是寻找任何包含yahoo的行).每个匹配都在它自己的行上,因此不需要多行选项.
这就是我到目前为止......
import re
inputfile = open('C:\\temp\\Scripts\\remove.txt','w',encoding="utf8")
inputfile.write(re.sub("\[(.*?)yahoo(.*?)\n","",inputfile))
inputfile.close()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
回溯(最近调用最后一次):第170行,在子返回_compile(模式,标志).sub(repl,string,count)TypeError:期望的字符串或缓冲区
我正在尝试导入csv,搜索每行中的单元格值(列),然后查找并计算任何空值或空值.然后,如果计数达到13,则执行X.但是,当我运行此代码时,单元格/列值似乎是单个对象而不是每列的单个值?如何搜索行中的单个单元格值?
示例代码
$DataFileLocation = "\\Server\Output.csv"
$sheet = import-csv $DataFileLocation
$count = 0
foreach ($row in $sheet) {
foreach ($column in $row) {
Write-Host "Searching value: $column"
if ($column -eq $null -or " ") {
Write-Host "Found a blank!"
$count++
}
}
$count
if ($count -eq 13) {
Write-Host "Found match!" -ForegroundColor Red
}
$count = 0
}
Run Code Online (Sandbox Code Playgroud) 我的目标是在目录中递归搜索所有包含正则表达式的文件,并且要牢记速度。然后输出到CSV,该CSV的一列包含完全匹配项,另一列显示找到它们的文件。感谢用户woxxom,我开始使用了,IO.File因为它显然比使用快得多Select-String。
这是我长期从事的项目,并且可以通过Select-String和使用完成Export-Csv,但这是一个相当缓慢的过程。
对我的新尝试遗漏了什么想法?
$ResultsCSV = "C:\TEMP\Results.csv"
$Directory = "C:\TEMP\examples"
$RX = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.|dot|\[dot\]|\[\.\])){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
$TextFiles = Get-ChildItem $Directory -Include *.txt*,*.csv*,*.rtf*,*.eml*,*.msg*,*.dat*,*.ini*,*.mht* -Recurse
$out = [Text.StringBuilder]
foreach ($FileSearched in $TextFiles) {
$text = [IO.File]::ReadAllText($FileSearched)
foreach ($match in ([regex]$RX).Matches($text)) {
if (!(Test-Path $ResultsCSV)) {
'Matches,File Path' | Out-File $ResultsCSV -Encoding ASCII
$out.AppendLine('' + $match.value + ',' + $FileSearched.fullname)
$match.value | Out-File $ResultsCSV -Encoding ascii -Append
$FileSearched.Fullname | Out-File $ResultsCSV -Encoding ascii -Append
$out.ToString() | Out-File $ResultsCSV -Encoding …Run Code Online (Sandbox Code Playgroud)