删除 .com python 之后的所有内容

Che*_*ead -1 python url loops

我在 urls.tmp 文件中得到了包含 3 个 url 的文件:

https://site1.com.br/wp-content/uploads/2020/06/?SD
https://site2.com.br/wp-content/uploads/tp-datademo/home-4/data/tp-hotel-booking/?SD
https://site3.com.br/wp-content/uploads/revslider/hotel-home/?MD
Run Code Online (Sandbox Code Playgroud)

我想删除每个“com.br/”之后的所有内容。

我尝试了这段代码:

# open the file
sys.stdout = open("urls.tmp", "w")

# start remove
for i in "urls.tmp":
    url_parts = urllib.parse.urlparse(i)
    result = '{uri.scheme}://{uri.netloc}/'.format(uri=url_parts)
    print(result) #overwrite the file

# close the file
sys.stdout.close()
Run Code Online (Sandbox Code Playgroud)

但输出给了我这个奇怪的东西:

:///
:///
:///
:///
:///
:///
:///
:///
Run Code Online (Sandbox Code Playgroud)

我是初学者,我做错了什么?

Sav*_*kov 5

您正在迭代"urls.tmp"字符串本身,但想要逐行遍历打开的文件对象。

所以试试这个:

with open("urls.tmp", "r") as urls_file:
    for line in urls_file:
        url_parts = urllib.parse.urlparse(line)
        result = "{uri.scheme}://{uri.netloc}/".format(uri=url_parts)
        print(result)

Run Code Online (Sandbox Code Playgroud)

编辑:作者更新了原始问题,提到应使用处理后的网址重写源文件内容,示例如下:

new_urls = []

with open("urls.tmp", "r") as urls_file:
    old_urls = urls_file.readlines()

for line in old_urls:
    url_parts = urllib.parse.urlparse(line)
    proc_url = "{uri.scheme}://{uri.netloc}/\n".format(uri=url_parts)
    new_urls.append(proc_url)

with open("urls.tmp", "w") as urls_file:
    urls_file.writelines(new_urls)
   
Run Code Online (Sandbox Code Playgroud)

  • 使用两个单独的流同时读取和写入同一个文件是一个非常糟糕的主意。因此,您应该首先预处理 url,将它们存储在列表中,然后以写入模式重新打开文件以放回新的 url (2认同)
  • `print` 不会保存到文件中。`print` 仅在控制台上显示字符串。你想要使用类似 [writeFile.writelines](https://www.w3schools.com/python/ref_file_writelines.asp) (2认同)