Удалите ненужные символы из файла 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)