我有一个大型文本文件(> 200mb),具有70k行。现在,我想在每行中找到一些特殊的文本,然后在每行的末尾再次放置它(用$符号分隔)。 N ++和Regex可以工作,但是速度有点慢,所以我想在python上尝试一下。
对于代码,我将得到fn.write(text + run +“ \ n”)的“ TypeError:必须为str,而不是列表”
import re
with open('Testfile.txt', mode='r', encoding='utf-8', errors='ignore') as f:
for line in f.readlines():
text = line.replace("\n","$")
run = re.findall(r'Typ: (.*?);', line) or "0"
print(text+run)
with open ("NEWTest.txt", mode="w") as fn:
fn.write(text+run+"\n")
有人知道该错误,也知道是否有更快的方法(代码)吗?
答案 0 :(得分:2)
尝试
import re
with open('Testfile.txt', mode='r', encoding='utf-8', errors='ignore') as f:
for line in f.readlines():
text = line.replace("\n","$")
run = re.findall(r'Typ: (.*?);', line) or "0"
with open ("NEWTest.txt", mode="w") as fn:
fn.write(text + ''.join(run) + "\n")
或
with open('Testfile.txt', mode='r', encoding='utf-8', errors='ignore') as f:
for line in f.readlines():
text = line.replace("\n","$")
run = re.search(r'Typ: (.*?);', line) or "0"
with open ("NEWTest.txt", mode="w") as fn:
fn.write(text + run + "\n")
答案 1 :(得分:1)
re.findall
returns a list of strings-即在提供给它的文本中找到的所有匹配项。
$.fancybox.open({
type : 'iframe',
src : "data:application/pdf;base64,' + data + '",
iframe : {
css : {
width: '80%',
height: '80%'
}
}
});
要在末尾再次包含它,可以将所有匹配项结合在一起:
>>> import re
>>> re.findall(r'Typ: (.*?);', 'Typ: foobar;')
['foobar']
如果您只想进行一场比赛,则可以改用 fn.write(text + ''.join(run) + "\n")
:
re.search
它适用于您的示例:
>>> re.search(r'Typ: (.*?);', 'Typ: foobar;').group(1)
'foobar'
但是,如果没有匹配项,>>> re.search(r'Typ: (.*?);', 'Typ: Mehrfamilienhaus;').group(1)
'Mehrfamilienhaus'
会给出re.search
,因此您可以在尝试检索None
之前检查是否已找到正确的匹配项(就像您在group
)
findall