Удалите ненужные символы из файла JSON, используя разные потоки (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, должен заменить все эти символы пробелом. Это сделано правильно, и это работает. Строки кода, которые являются комментариями, являются строками кода, которые я использовал, но это не сработало. Это будет только заменить символы только из 1 аргумента.

Есть ли способ передать все нежелательные символы в каждом для каждого аргумента, используя потоки. Если это невозможно с использованием потоков, есть ли альтернатива?

Кстати, файл, в котором я выполняю класс: (main.py):

from downloader import Download

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

Спасибо

1 ответ

Вы можете применить замены один за другим:

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(...)

Кстати, вместо того, чтобы иметь несколько unwantedN а также wantedNбыло бы намного проще использовать список (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)
Другие вопросы по тегам