Ubuntu:如何将电子邮件和URL从一个大文件过滤到一个文件?


0

我有一个很大的文件存储在一个文件夹中。这些文件通常在每一行上包含电子邮件和URL。
举例来说

gg@example.com
example.com
ssdfghhg
www.example1.com
http://www.example2.com
https://example3.com
better@example123.com

我想知道如何将电子邮件分隔为一个文件,将网址分隔为一个文件。请让我知道Ubuntu版本的python如何帮助我做到这一点?

output:  
email.txt
gg@example.com
better@example123.com
URL.txt
example.com
www.example1.com
http://www.example2.com
https://example3.com

我期望输出文件为UTF-8。只是期望这些URL在语法上应该是一个URL。无需验证网址是否存在。


一个问题:所有文件的所有数据都应该放入一个输出文件中,还是每个文件一个输出文件中?
雅各布·弗利姆

@JacobVlijm所有电子邮件均包含一个URL和另一个URL。输入应为目录。
贾弗·威尔逊

您好Jaffer,重新阅读您的问题,您可能需要添加:1.这些行可能包含多个字符串(URL,电子邮件或都不包含)2.您未提及可能的编码问题。3.此外,在没有无效或有效域列表的情况下,实际上没有办法定义URL.txt无效URL 。点是唯一的标记,在这种情况下不起作用。您能否在问题中也为@Shreyash S Sarnayak澄清一下?
雅各布·弗利姆

@JacobVlijm好的,我会解释。
贾弗·威尔逊

Answers:


2
import sys
import glob  # to get all files in a directory
f1 = open('email.txt', 'w')     # Open in write mode
f2 = open('url.txt', 'w')       # Open in write mode

for i in glob.glob(sys.argv[1] + '/*'):
    with open(i) as f:
        for line in f:
            if '@' in line:     # email
                print(line.strip(), file=f1)
            elif '.' in line:   # url
                print(line.strip(), file=f2)
f1.close()
f2.close()

假设您的非URL文本中不包含.该文本,则此方法有效。

另存为file.py并运行为

python3 file.py dirname

如果我只过滤@,则该URL是否存储在另一个文件中呢?数据也可能会产生一些垃圾。
贾弗·威尔逊

@JafferWilson我听不懂。
Shreyash S Sarnayak

实际上,一行中可能有简单的文本,而并非总是电子邮件或URL
Jaffer Wilson

@JafferWilson我更新了答案。
Shreyash S Sarnayak

@ShreyashSSarnayak,您好,我不在家atm,但通过聊天,我了解文件也可能存在编码错误。不过这不是问题。请参阅docs.python.org/3/howto/unicode.html#the-unicode-type。此外,“。” 可能不是URL的最可靠标记,最好同时使用/ www.和imo。此外,该行可能包含多个字符串。http:https:
雅各布·弗利姆
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.