【问题标题】:Taking lines from one text file and putting them into two different text files using regex? #python从一个文本文件中取出行并使用正则表达式将它们放入两个不同的文本文件中? #Python
【发布时间】:2020-07-31 19:35:41
【问题描述】:

我使用的语言是python

问题是:编写一个接受一个参数(文件名)的函数。文件包含各种文本行,有时还包含电话号码(即并非所有行都包含电话号码)。读取给定文件 逐行并在其中搜索电话号码(使用正则表达式),如果电话号码 存在于给定行中,将此行写入 phone-number-containing-lines.txt 否则写入此行 到plain-lines.txt。因此,一些行将在一个文件中,而其他行将在第二个文件中。

这是我想出的代码:

import re

f1 = open('phonenumber.txt', 'r')
regex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')

for line in f1:
    phone_numbers = regex.findall(line)
    for num in phone_numbers:
        f = open('phone-number-containing-lines.txt', 'w')
        f.writelines(num)
        f.close()

f2 = open('phonenumber.txt','r')    
searchquery = re.compile(r'^[^\d]*$')

for line in f2:
    plain_text = regex.findall(line)
    for txt in plain_text:
        d = open('plain-lines.txt', 'w')
        d.writelines(txt)
        d.close()

我没有收到任何错误,但我也只是得到了 phone-number-containing-lines.txt 只有一个电话号码,没有来自该行的文本和纯文本。 txt 完全为空

【问题讨论】:

    标签: python-3.x regex file


    【解决方案1】:

    您的问题:

    您使用w 打开文件的每种类型都会重写它。所以你只会得到包含电话号码的最后一行。

    解决方案:

    您可以使用 a 打开它以进行追加,但这不会有效。您应该打开文件一次。最后,考虑使用re.search() 而不是re.findall,因为您只关心线路是否包含电话号码。如果线路包含多个电话号码,您当前的解决方案会将线路多次正确地输出:

    import re
    
    PATTERN = re.compile(r'[0-9]{3}-[0-9]{3}-[0-9]{4}')
    
    with open('phonenumber.txt') as f1, open('phone-number-containing-lines.txt', 'w') as f2:
        for line in f1:
            if PATTERN.search(line):
                f2.write(line)
    

    相关Difference between modes a, a+, w, w+, and r+ in built-in open function?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 2016-04-16
      • 2020-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      相关资源
      最近更新 更多