【问题标题】:Removing text from a text file从文本文件中删除文本
【发布时间】:2015-07-30 14:10:00
【问题描述】:

我有一个文本文件,其中包含我需要从中创建快捷方式的 URL。该文件包含我不需要的其他信息。 例如: 事件编号 - xyz

More text here
And here

ALL https://.....

Atendees URLs 

1 -tab- https://.....
2 -tab- https://...
etc.

现在我删除了多余的文本和空行,只保留了包含 URL 的行(加上 \n \t)。然后我在 python 中使用此代码将 URL 放入列表中。

def fileOpen(self):

        self.skytap = []
        with open(self.file_1, 'r') as f:   
            for line in f:
                self.skytap.append(line.strip('\t\r\n'))

我想知道 Python 中是否有一种方法可以删除所有文本、编号等,并仅按照它们在文件中的顺序保留 https://........ URLS当然把它们放在列表中,这样我就可以制作快捷方式(我已经解决了制作快捷方式的问题) 我在网上查看了一些问题,有些人建议 sed 作为解决此问题的更好工具。会不会是这样。 我是编程新手,并感谢对此提供的任何见解。

【问题讨论】:

    标签: python sed


    【解决方案1】:

    你用sed标记了这个,但你正在寻找的工具是grep

    grep -o 'https\?://[^ ]\+' file.txt
    

    它提取序列http 加上后续的非空格字符。

    【讨论】:

    • 太棒了!谢谢,我只能像您说的那样使用 grep 保留带有 https 的行,并将其回显到单独的文件中。但是我仍然在每一行都有一个数字,然后在 https 之前有一个 。如何删除这些?
    • 行号可能是由.bashrc 中的别名或您的$GREP_OPTIONS 环境变量引起的。使用GREP_OPTIONS= /bin/grep -o 而不仅仅是grep
    【解决方案2】:

    您可以使用fileinput.input 找到带有https://re 的行来更改文件:

    import  fileinput
    import  re
    
    r = re.compile(r"https://.*")
    urls = []
    for line in fileinput.input("match.txt",inplace=True):
         s = r.search(line)
         if s:
            print(line,end="")
            urls.append(s.group())
    

    如果您使用的是 python 2,请在代码顶部添加 from __future__ import print_function

    如果要删除文件中 https 之前的子字符串,请将 print(line,end="") 替换为 print(s.group(),end="")

    或者正如@Jon 指出的那样,导入 sys 并使用sys.stdout.write

    import  fileinput
    import  re
    import sys
    
    r = re.compile(r"https://.*")
    urls = []
    for line in fileinput.input("match.txt",inplace=True):
         s = r.search(line)
         if s:
            sys.stdout.write(line)
            urls.append(s.group())
    

    【讨论】:

    • 自从fileinput“劫持”标准输出...使其同时兼容 2.x 和 3.x import sys 然后sys.stdout.write(line) :)
    • @JonClements,是的,已添加。
    • @JonClements 目前我必须与 Python 打交道并问自己,他们到底为什么要这样做 python2, 3 决定。现在代码变得更加复杂,因为许多应用程序无法决定它们是否想用 python2 或 3 运行。就好像我需要为 PHP4 和 5 编写代码一样。难以置信! (对我来说)
    • @hek2mgl 这已经是 BDFL 的遗憾了,它曾经是一个声明——在语言还年轻的时候可能看起来是个好主意? :p 哦,好吧...
    • 我真的爱上 Python,但这样做有时对我来说仍然很难。给我更多的时间... :)
    【解决方案3】:

    也许我可以帮助你:你搜索这个正则表达式怎么样:https?://[A-Za-z0-9-._~:/?#[\]@!$&\',*+,;=]* 它搜索所有有效的 URL 字符

    事实上,这是一个可以完成这项工作的程序(未经测试):

    import re
    
    string="""
    More text here
    And here
    
    ALL https://.....
    
    Atendees URLs 
    
    1 -tab- https://.....
    2 -tab- https://...
    etc.
    """
    
    links = re.compile(r'https?://[A-Za-z0-9-._~:/?#[\]@!$&\',*+,;=]*').findall(string)
    

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 2021-12-23
      • 2015-12-22
      • 2011-01-05
      • 2016-06-19
      相关资源
      最近更新 更多