使用不同的线程从JSON文件中消除不需要的字符(Python)

2024-10-01 02:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

在python文件中,我创建了一个名为Download的类。类所在的代码:

import requests, json, os, pytube, threading

class Download:


    def __init__(self, url, json=False, get=False, post=False, put=False, unwanted="", wanted="", unwanted2="", wanted2="", unwanted3="", wanted3=""):
        self.url = url
        self.json = json
        self.get = get
        self.post = post
        self.put = put
        self.unwanted = unwanted
        self.wanted = wanted
        self.unwanted2 = unwanted2
        self.wanted2 = wanted2
        self.unwanted3 = unwanted3
        self.wanted3 = wanted3 

    def downloadJson(self):
        if self.get is True:
            downloadJson = requests.get(self.url)
            downloadJson = str(downloadJson.content)
            downloadJsonS = str(downloadJson) # This saves the downloaded JSON file as string

            if self.json is True:
                with open("downloadedJson.json", "w") as writeDownloadedJson:
                    writeDownloadedJson.write(json.dumps(downloadJson))
                    writeDownloadedJson.close()

                with open("downloadedJson.json", "r") as replaceUnwanted:
                    a = replaceUnwanted.read()
                    x = a.replace(self.unwanted, self.wanted)
                    # y = a.replace(self.unwanted2, self.wanted2)
                    # z = a.replace(self.unwanted3, self.wanted3)
                    print(x)

                with open("downloadedJson.json", "w") as writeUnwanted:
                    # writeUnwanted.write(y)
                    # writeUnwanted.write(z)
                    writeUnwanted.write(x)

            else:
                # with open("downloadedJson.json", "w")as j:
                #     j.write(downloadJsonS)
                #     j.close()
                pass

这一切都是我自己写的,我明白它是如何运作的。我的目标是删除下载后JSON文件中所有不需要的字符,例如:\\n\'\n。我在__init__()函数中有很多参数,比如__init__(unwanted="", wanted="", unwanted2="")等等

这样,当向unwanted参数添加任何字符时,例如:\\n,它应该用空格替换所有这些字符。这是正确的,它的工作。作为注释的代码行是我正在使用的代码行,但这不起作用。它只替换only1参数中的字符。你知道吗

是否有任何方法可以使用线程为每个参数传递所有不需要的字符。如果无法使用线程,是否有其他选择?你知道吗

顺便说一下,我执行类的文件:(主.py):

from downloader import Download

with open("url.txt", "r")as url:
    x = Download(url.read(), get=True, json=True, unwanted="\\n")
    x.downloadJson()

谢谢


Tags: selfjsonfalseurlgetdownloadaswith
1条回答
网友
1楼 · 发布于 2024-10-01 02:30:26

您可以一个接一个地应用替换项:

x = a.replace(self.unwanted, self.wanted)
x = x.replace(self.unwanted2, self.wanted2)
x = x.replace(self.unwanted3, self.wanted3)

您也可以将替换项链接在一起,但这很快就会变得难以理解:

x = a.replace(...).replace(...).replace(...)

顺便说一句,不是有多个unwantedNwantedN, 使用(unwanted, wanted)对的列表可能会容易得多,比如:

def __init__(self, url, json=False, get=False, post=False, put=False, replacements=[]):
    self.url = url
    self.json = json
    self.get = get
    self.post = post
    self.put = put
    self.replacements = replacements

然后可以在循环中执行替换:

x = a
for unwanted, wanted in self.replacements:
    x = x.replace(unwanted, wanted)

相关问题 更多 >