【问题标题】:Using multiple re.sub() calls in one file with Python使用 Python 在一个文件中使用多个 re.sub() 调用
【发布时间】:2013-10-16 01:28:14
【问题描述】:

我有一个包含大量随机字符串的文件。有些模式我不想删除,所以我决定使用 RegEX 来检查它们。到目前为止,这段代码完全符合我的要求:

#!/usr/bin/python

import csv
import re
import sys
import pdb


f=open('output.csv', 'w')

with open('retweet.csv', 'rb') as inputfile:
    read=csv.reader(inputfile, delimiter=',')
    for row in read:
        f.write(re.sub(r'@\s\w+', ' ', row[0]))
        f.write("\n")
f.close()

f=open('output2.csv', 'w')

with open('output.csv', 'rb') as inputfile2:
    read2=csv.reader(inputfile2, delimiter='\n')
    for row in read2:
        a= re.sub('[^a-zA-Z0-9]', ' ', row[0])
        b= str.split(a)
        c= "+".join(b)
        f.write("http://www.google.com/webhp#q="+c+"&btnI\n")
f.close()

问题是,我想避免打开和关闭文件,因为如果我需要检查更多模式,这可能会变得混乱。如何在同一个文件上执行多个 re.sub() 调用并将其写入一个包含所有替换的新文件?

感谢您的帮助!

【问题讨论】:

  • csv.reader(..., delimiter='\n')?为什么不直接逐行读取文件呢? for line in inputfile2: 就够了..

标签: python regex


【解决方案1】:

在当前行一次性应用所有替换:

with open('retweet.csv', 'rb') as inputfile:
    read=csv.reader(inputfile, delimiter=',')
    for row in read:
        text = row[0]
        text = re.sub(r'@\s\w+', ' ', text)
        text = re.sub(another_expression, another_replacement, text)
        # etc.
        f.write(text + '\n')

请注意,使用csv.reader(..., delimiter='\n') 打开文件听起来很像您将该文件视为一系列行;你可以遍历文件:

with open('output.csv', 'rb') as inputfile2:
    for line in inputfile2:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-03
    • 2017-10-06
    • 2020-01-19
    • 1970-01-01
    • 2023-01-18
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多