如何使用正则表达式(Python)将更正插入文件中

问题描述 投票:0回答:1

我正在尝试更正数据集中的某些条目(〜30MB)。特别是带有文本列和pos / neg列的csv文件。一些文本字段缺少自动引号,因此我想手动插入。这是我编写的代码:

add_quotes = re.compile(r'^(([^"]|"")(.*)([^"]|"")),(pos|neg)$')
with open(<path-to-csv>, 'r') as f:
    s = f.read()
s = re.sub(add_quotes, r'"\1",\5', s)
with open(<path-to-same-csv>, 'w') as f:
    f.write(s)

我面临的问题是,运行此代码后,我用来查找引号的正则表达式仍与文件中的某些条目匹配。到目前为止,我已经尝试过:1.以'r+'的身份打开文件,并在写入之前调用f.seek(0),而不是先'r'然后是'w'。2.写入另一个文件。3.以字节格式而不是文本(即'r+b' / 'wb')打开和编辑文件。所有这些都运行平稳,但是达到了相同的结果。

注意:

  • 替换后调用add_quotes.findall(s)返回一个空列表,因此更改了字符串,但是以某种方式未将更改写入文件中
  • 相同的代码在只有一个示例的较小文件上起作用

谢谢!


编辑

我尝试在具有3个条目的文件上使用此文件,但它不起作用,因此我怀疑问题在于正则表达式,与文件大小无关。

python file-writing re
1个回答
0
投票

添加标志re.MULTILINE解决了问题:

add_quotes = re.compile(r'^(([^"]|"")(.*)([^"]|"")),(pos|neg)$', re.MULTILINE)

^运算符可能不匹配,但第一行没有此标志,而$可能仅匹配最后一行,因此中间的每个条目都不匹配。

我的困惑是因为即使我以为我过滤掉了它们,通过编辑器在文件中搜索此表达式仍返回了匹配项。

© www.soinside.com 2019 - 2024. All rights reserved.