Вот предыдущая версия Comparestring.py, которая возвращает наиболее подходящий URL продукта из базы данных. json и product_list.yaml
Comparestring.py
from difflib import get_close_matches
import json, yaml
import pprint
class Comparestring():
def __init__(self):
self.Purl = ''
with open(r'C:\Users\Latitude\Desktop\Shadman\Scrapy_Projects\database.json', encoding='utf-8')
as File:
data = json.load(File)
# File = open("database.json", "r")
# data = json.load(File)
with open(r'C:\Users\Latitude\Desktop\Shadman\Scrapy_Projects\Product_List.yaml') as file:
ProductList = yaml.load(file, Loader=yaml.FullLoader)
pp = pprint.PrettyPrinter(indent=4)
# for doc in my_list:
# for k,v in doc.items():
# pp.pprint(k,"=",v)
# F = open("Product_List.yaml", "r")
# data2 = yaml.load_all(F,Loader=yaml.FullLoader)
# data3 = data2.__dict__
# print(type(data2))
# for doc in data2:
# pp.pprint(doc)
title_list = []
model_list = []
for doc in data:
title_list.append(doc.get('title'))
model_list.append(doc.get('model_no'))
# pprint (title_list)
# pprint(model_list)
str1 = ""
str2 = ""
key = '0001'
for key, value in ProductList.items():
if key == '0001':
str1 = value['M_title']
str2 = value['Manufacturer_Model']
# str1 = data2.get('Product_1').get('M_title')
# str2 = 'GD350-1B' #get this from the 1st product of yaml file
matches1 = get_close_matches(str1, title_list, n=3) #get the invidual model_no of this title and match with str2
# print(matches1) #print out the product url of the best matched model_no with str2
matches2 = []
matches3 = []
for doc in data:
if doc.get('title') in matches1:
matches2.append(doc.get('model_no'))
# print(matches2)
matches3 = get_close_matches(str2, matches2, n=1) #get the best matched model_no
# print(matches3)
def Final_Product(self):
for doc in self.data:
if doc.get('model_no') in self.matches3:
self.Purl= doc.get('product_url')
# print(furl)
return self.Purl
product_url = Comparestring()
URL = product_url.Final_Product()
print(URL)
Теперь я изменил Comparestring.py немного и не может получить тот же вывод
Comparestring2.py
from difflib import get_close_matches
import json, yaml
import pprint
class Comparestring():
def __init__(self):
self.Purl = ''
with open(r'C:\Users\Latitude\Desktop\Shadman\Scrapy_Projects\database.json', encoding='utf-8') as File:
data = json.load(File)
# File = open("database.json", "r")
# data = json.load(File)
with open(r'C:\Users\Latitude\Desktop\Shadman\Scrapy_Projects\Product_List.yaml') as file:
ProductList = yaml.load(file, Loader=yaml.FullLoader)
pp = pprint.PrettyPrinter(indent=4)
# for doc in my_list:
# for k,v in doc.items():
# pp.pprint(k,"=",v)
# F = open("Product_List.yaml", "r")
# data2 = yaml.load_all(F,Loader=yaml.FullLoader)
# data3 = data2.__dict__
# print(type(data2))
# for doc in data2:
# pp.pprint(doc)
title_list = []
model_list = []
for doc in data:
title_list.append(doc.get('title'))
model_list.append(doc.get('model_no'))
# pprint (title_list)
# pprint(model_list)
str1 = ""
str2 = ""
# key = 'Product_1'
matches2 = []
matches3 = []
for key, value in ProductList.items():
# if key == 'Product_1':
str1 = value['M_title']
str2 = value['Manufacturer_Model']
# str1 = data2.get('Product_1').get('M_title')
# str2 = 'GD350-1B' #get this from the 1st product of yaml file
matches1 = get_close_matches(str1, title_list, n=3) #get the invidual model_no of this title and match with str2
# print(matches1) #print out the product url of the best matched model_no with str2
for doc in data:
if doc.get('title') in matches1:
matches2.append(doc.get('model_no'))
# print(matches2)
matches3 = []
matches3 = get_close_matches(str2, matches2, n=1) #get the best matched model_no
# print(matches3)
def Final_Product(self):
for doc in self.data:
if doc.get('model_no') in self.matches3:
self.Purl= doc.get('product_url')
print(self.Purl)
# return self.Purl
product_url = Comparestring()
product_url.Final_Product()
база данных. json
[
{
"title": "Casio Men's G-Shock GD350-1C Black Resin Sport Watch",
"dimension": "1 x 1 x 1 inches",
"shipping_weight": "5.6 ounces",
"model_no": "GD350-1CC",
"Product_Code": "B01C71NW9U",
"Battery": "1 A batteries required. (included)",
"product_url": "https://www.amazon.com/Casio-G-Shock-GD350-1C-Black-Resin/dp/B01C71NW9U/ref=sr_1_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1"
},
{
"title": "Casio Men's Watches GD-350-1BER",
"dimension": "4.3 x 4.3 x 3.1 inches",
"shipping_weight": "7 ounces (",
"model_no": "GD-350-1BER",
"Product_Code": "B00BFDES9A",
"Battery": "1 CR2 batteries required. (included)",
"product_url": "https://www.amazon.com/Casio-GD-350-1BER-Mens-Watches/dp/B00BFDES9A/ref=sr_1_fkmr3_2?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-2-fkmr3"
},
{
"title": "Casio Men's XL Series G-Shock Quartz 200M WR Shock Resistant Resin Color: Matte Black (Model GD-400MB-1CR)",
"dimension": "4.3 x 4.3 x 3.6 inches",
"shipping_weight": "7.2 ounces (",
"model_no": "GD-400MB-1CR",
"Product_Code": "B00OAY5ZPC",
"Battery": "1 Lithium Metal batteries required. (included)",
"product_url": "https://www.amazon.com/G-Shock-Military-GD-400-Watch-Black/dp/B00OAY5ZPC/ref=sr_1_fkmr2_2?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-2-fkmr2"
},
{
"title": "Casio Men's G-Shock Quartz Watch with Resin Strap, Black, 20 (Model: DW5600E-1V)",
"dimension": "1 x 1 x 1 inches",
"shipping_weight": "4 ounces (",
"model_no": "DW5600E-1V",
"Product_Code": "B000GAYQKY",
"Battery": "1 CR123A batteries required.",
"product_url": "https://www.amazon.com/Casio-G-shock-DW5600E-1V-Shock-Resistant/dp/B000GAYQKY/ref=sr_1_fkmr4_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1-fkmr4"
},
{
"title": "Casio #10287236 Genuine Factory Replacement Band for G-Shock",
"dimension": "7.7 x 1.9 x 0.3 inches",
"shipping_weight": "0.64 ounces (",
"model_no": "10287236",
"Product_Code": "B0063VUADC",
"Battery": "November 5, 2011",
"product_url": "https://www.amazon.com/Casio-10287236-Genuine-Factory-Replacement/dp/B0063VUADC/ref=sr_1_fkmr3_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1-fkmr3"
},
{
"title": "Casio F91W-1 Classic Resin Strap Digital Sport Watch",
"dimension": null,
"shipping_weight": null,
"model_no": null,
"Product_Code": null,
"Battery": null,
"product_url": "https://www.amazon.com/Casio-F91W-1-Classic-Resin-Digital/dp/B000GAWSDG/ref=sr_1_fkmr5_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1-fkmr5"
},
{
"title": "Letsfit Smart Watch, Fitness Tracker with Heart Rate Monitor, Activity Tracker with 1.3\" Touch Screen, IP68 Waterproof Pedometer Smartwatch with Sleep Monitor, Step Counter for Women and Men",
"dimension": null,
"shipping_weight": null,
"model_no": null,
"Product_Code": null,
"Battery": null,
"product_url": "https://www.amazon.com/Letsfit-Activity-Waterproof-Pedometer-Smartwatch/dp/B07X2KLTJ2/ref=sr_1_fkmr5_2?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-2-fkmr5"
},
{
"title": "Casio Men's G-SHOCK - The GA 100-1A1 Military Series Watch in Black",
"dimension": "4 x 4.6 x 4.2 inches",
"shipping_weight": "7.2 ounces (",
"model_no": " for Proposition 65 warning",
"Product_Code": "B003WPUU0U",
"Battery": "GA-100-1A1DR (G270)",
"product_url": "https://www.amazon.com/G-Shock-Combi-Military-Watch-Black/dp/B003WPUU0U/ref=sr_1_fkmr4_2?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-2-fkmr4"
},
{
"title": "Genuine Replacement for Watch Band 16mm Gray Ggraphite Grey Strap #10437723 Casio GD-350-8",
"dimension": "B082ZFS8FF",
"shipping_weight": null,
"model_no": null,
"Product_Code": "December 22, 2019",
"Battery": null,
"product_url": "https://www.amazon.com/Genuine-Replacement-Ggraphite-10437723-GD-350-8/dp/B082ZFS8FF/ref=sr_1_fkmr2_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1-fkmr2"
},
{
"title": "Casio GD-350-1BDR Wristwatch",
"dimension": "3.9 x 4.3 x 3.9 inches",
"shipping_weight": "9.1 ounces (",
"model_no": "GD-350-1BDR (G441)",
"Product_Code": "B00CHXQD7M",
"Battery": "1 Lithium ion batteries required. (included)",
"product_url": "https://www.amazon.com/Casio-GD-350-1BDR-G441-Wristwatch/dp/B00CHXQD7M/ref=sr_1_fkmr1_2?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-2-fkmr1"
},
{
"title": "Casio 10437723 Genuine Factory Grey G Shock Replacement Band - GD350-8",
"dimension": "7.9 x 5.5 x 0.6 inches",
"shipping_weight": "0.8 ounces (",
"model_no": "10437723",
"Product_Code": "B07PXL494T",
"Battery": "March 21, 2019",
"product_url": "https://www.amazon.com/Casio-10437723-Genuine-Factory-Replacement/dp/B07PXL494T/ref=sr_1_fkmr0_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1-fkmr0"
},
{
"title": "Casio 2018 GD350-1CR Watch G-Shock Vibration Alarm Black",
"dimension": null,
"shipping_weight": null,
"model_no": null,
"Product_Code": null,
"Battery": null,
"product_url": "https://www.amazon.com/Casio-GSHOCK-Quartz-Stainless-Steel/dp/B079R2LVHG/ref=sr_1_5?dchild=1&keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-5"
},
{
"title": "G-Shock Men's GA-100 Neon Highlights Watch",
"dimension": "5 x 5 x 5 inches",
"shipping_weight": "5.6 ounces (",
"model_no": " for Proposition 65 warning",
"Product_Code": "B00GBHZDY4",
"Battery": "GA-100C-8ACR",
"product_url": "https://www.amazon.com/Casio-G-Shock-Analog-Digital-Watch-GA-100C-8ACR/dp/B00GBHZDY4/ref=sr_1_6?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-6"
},
{
"title": "G-Shock Men's Grey Sport Watch",
"dimension": "4.3 x 3.8 x 3.8 inches",
"shipping_weight": "8 ounces (",
"model_no": " for Proposition 65 warning",
"Product_Code": "B00MAMPGGE",
"Battery": "GD-400-1CR",
"product_url": "https://www.amazon.com/Casio-G-Shock-GD400-1CR-Black-Resin/dp/B00MAMPGGE/ref=sr_1_fkmr1_1?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-1-fkmr1"
},
{
"title": "Casio Men's XL Series G-Shock Quartz 200M WR Shock Resistant Resin Color: Matte Grey (Model GA-700UC-8ACR)",
"dimension": "4.5 x 4 x 4 inches",
"shipping_weight": "1.44 ounces (",
"model_no": "GA-700UC-8ACR",
"Product_Code": "B073ZHGNVC",
"Battery": "1 Lithium Metal batteries required. (included)",
"product_url": "https://www.amazon.com/Casio-G-Shock-Quartz-Shock-Resistant/dp/B073ZHGNVC/ref=sr_1_4?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-4"
},
{
"title": "G-Shock Men's GD 350 Watch",
"dimension": "1 x 1 x 1 inches",
"shipping_weight": "12 ounces (",
"model_no": "GD350-1B",
"Product_Code": "B00BU6RUU6",
"Battery": "1 CR2 batteries required. (included)",
"product_url": "https://www.amazon.com/Casio-GD350-1B-Shock-Black-Watch/dp/B00BU6RUU6/ref=sr_1_2?keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-2"
},
{
"title": "Casio Men's G-Shock GD350 Sport Watch",
"dimension": "1 x 1 x 1 inches",
"shipping_weight": "6.4 ounces (",
"model_no": " for Proposition 65 warning",
"Product_Code": "B00BU6TXEC",
"Battery": "GD350-8",
"product_url": "https://www.amazon.com/Casio-G-Shock-GD350-8-Resin-Sport/dp/B00BU6TXEC/ref=sr_1_3?dchild=1&keywords=Casio+Men%27s+G-Shock+GD350-8+Grey+Resin+Sport+Watch&qid=1577591994&sr=8-3"
}
]
Product_list.yaml
---
'0001':
Customer_ID: 'shadman.com' #amazon
M_Product_Code: 'WT005'
Manufacturer_Code: 'B079R2LVHG'
Manufacturer_Model: 'GD350-1B'
M_title: >
"Casio Men's G-Shock GD350-8 Grey Resin Sport Watch"
M_Description: |
- "Imported"
- "World time; 35 time zones (100 cities), city name display, daylight saving on/off; 12/24 Hour Formats and Full Auto Calendar (pre-programmed until the year 2099)"
- "Shock Resistant and 200M (660ft) Water Resistant"
- "Auto LED Backlight (Super Illuminator) and Flash alert"
- "Countdown timer, 1/100 second stopwatch, measuring capacity: 999:59'59.99''; measuring modes: elapsed time, split time, 1st-2nd place times"
- "Vibration Alert (Daily Alarms, Countdown Timer, Hourly Time Signal)"
Product-img-url: 'https://images-na.ssl-images-amazon.com/images/I/81gNIjoExqL._UY741_.jpg'
Size: []
Weight: 0.3149632 #Kg
List_Price: &price [81,124] #US_Doller
Sale_Price: *price #US_Doller
Avg_Rating: 4.7
Category: 'Wrist Watches'
Title_report_id: null
Title_data_stat: null
Description_report_id : null
Description_data_stat: null
Review_report_id : null
Review_data_stat: null
Social_sent_report_id : null
Social_sent_data_stat: null
Pricing_trend_report_id : null
pricing_trend_data_stat: null
Price_comp_report_id : null
Price_comp_data_stat: null
On_sale_report_id : null
On_sale_data_stat: null
Geo_sales_trend_report_id : null
Geo_sales_trend_data_stat: null
Event_sales_report_id : null
Event_sales_data_stat: null
'0002':
Customer_ID: 'shadman.com' #ebay.com
M_Product_Code: 'WT089'
Manufacturer_Code: '5676LWT'
Manufacturer_Model: 'timberland'
M_title: >
"MEN'S TIMBERLAND BOOTS 6 INCH PREMIUM WATERPROOF 10061 WHEAT NUBUCK"
M_Description: |
- "100% Leather"
- "Rubber sole"
- "Shaft measures approximately 7.25 from arch"
- "Heel measures approximately 1.25\"
- "Platform measures approximately 0.75"
- "Boot opening measures approximately 14.5\" around"
- "CLASSIC STYLE: Rain, slush, or snow, boots are Timberland's specialty, and when you think of Timberland boots, you're thinking of these. Our original waterproof boot provides tireless waterproof performance and instantly recognizable work-boot styling."
- "LOOK NO FURTHER for trail-ready performance and style. Our selection of mens hiking boots, waterproof hiking boots, casual boots, and casual shoes is designed to fit in with your outdoor-ready ensembles, whether youre heading to the summit or downtown."
- "TIMBERLAND BOOTS are synonymous with quality workmanship. Whether you're looking for mens boots, womens boots, or kids boots, Timberland has you covered. For the best in hiking boots, rain boots, work boots, casual shoes & boots & more, choose Timberland."
- "WHAT YOU NEED IN THE OUTDOORS: Timberland isn't just for high-quality mens, womens, and kids boots. We have the gear you need for all your outdoor adventures, including jackets and coats for outdoor activities, backpacks and luggage & outdoor accessories."
- "THE BEST IN OUTDOORS: See how Timberland's line of outdoor wear stacks up to hiking boots and outdoor gear from brands like Columbia, Merrell, Vasque, Oboz, Hi Tec, Doc Martens, Uggs, Muck Boots, Keen, Maelstrom, Justin, Hunter, Bogs, Nike, or Sorel."
Product-img-url: 'https://images.zentail.com/1005/e22acd9da9e46fe704a0853bbf134a93a473897c623de9545ec71db0ae1424f3.jpg'
Size: []
Weight: null
List_Price: 180 #US_Doller
Sale_Price: 78 #US_Doller
Avg_Rating: null
Category: 'Boots'
Title_report_id: null
Title_data_stat: null
Description_report_id : null
Description_data_stat: null
Review_report_id : null
Review_data_stat: null
Social_sent_report_id : null
Social_sent_data_stat: null
Pricing_trend_report_id : null
pricing_trend_data_stat: null
Price_comp_report_id : null
Price_comp_data_stat: null
On_sale_report_id : null
On_sale_data_stat: null
Geo_sales_trend_report_id : null
Geo_sales_trend_data_stat: null
Event_sales_report_id : null
Event_sales_data_stat: null
'0003':
Customer_ID: 'shadman.com' #amazon
M_Product_Code: 'JW0145'
Manufacturer_Code: '2030SRB'
Manufacturer_Model: 'NAS0099Lapiz'
M_title: >
"Leafael Infinity Love Heart Pendant Necklace Made with Swarovski Crystals Birthstone Jewelry Gifts for Women, Silver-Tone, 18\"+2\", Presented by Miss New York"
M_Description: |
- "Original design from our studio in Boston; Made with finest authentic Swarovski Crystal; Ultra durable with a thick layer of white gold silver plating."
- "Dress in style with Miss New York Nicole Kulovany! We are very glad to have Nicole be the face of our jewelry line."
- "Leafael Jewelry prides itself on meeting strict health standards. Our products are considered lead free, nickel free, and allergy free, complying with California Proposition 65 and European entry 27 of Annex XVII to REACH."
- "SPECIFICATIONS - Pendant Size: 0.5\" x 0.9\" |Chain Length: 18\"+ 2\" |Plating: White Gold Plated Silver-tone | Clasp: Lobster Claw | Stone: Swarovski Crystal Wild Heart Shaped Stone, Lapis Lazuli Cobalt Blue; Swarovski Flatback Zirconia Rhinestones, Crystal AB Color."
- "Each Leafael Jewelry piece is packed with exclusively elegant white, silver-embossed jewelry gift box, bringing a gorgeous presentation as a gift for her."
Product-img-url: 'https://images-na.ssl-images-amazon.com/images/I/71qaSPm0jVL._SX625._SX._UX._SY._UY_.jpg'
Size: [20,0.75,0.6] # length, width, height (inch)
Weight: null #Kg
List_Price: 49.99 #US_Doller
Sale_Price: 39.99 #US_Doller
Avg_Rating: 4.5
Category: 'Pendants'
Title_report_id: null
Title_data_stat: null
Description_report_id : null
Description_data_stat: null
Review_report_id : null
Review_data_stat: null
Social_sent_report_id : null
Social_sent_data_stat: null
Pricing_trend_report_id : null
pricing_trend_data_stat: null
Price_comp_report_id : null
Price_comp_data_stat: null
On_sale_report_id : null
On_sale_data_stat: null
Geo_sales_trend_report_id : null
Geo_sales_trend_data_stat: null
Event_sales_report_id : null
Event_sales_data_stat: null
'0004':
Customer_ID: 'shadman.com' #aliexpress
M_Product_Code: 'J00013'
Manufacturer_Code: '78730SJW'
Manufacturer_Model: 'XZ16'
M_title: >
"Night Club Bar Stage Wedding Banquet Party Fashion Men's Suit"
M_Description: >
""
Product-img-url: 'https://ae01.alicdn.com/kf/H2bbbbf98f5184f48b6ff7f1e3a34289e4.jpg'
Size: null
List_Price: 21 #US_Doller
Sale_Price: 36 #US_Doller
Avg_Rating: 4.5
Category: "Men's Suit"
Title_report_id: null
Title_data_stat: null
Description_report_id : null
Description_data_stat: null
Review_report_id : null
Review_data_stat: null
Social_sent_report_id : null
Social_sent_data_stat: null
Pricing_trend_report_id : null
pricing_trend_data_stat: null
Price_comp_report_id : null
Price_comp_data_stat: null
On_sale_report_id : null
On_sale_data_stat: null
Geo_sales_trend_report_id : null
Geo_sales_trend_data_stat: null
Event_sales_report_id : null
Event_sales_data_stat: null
'0005':
Customer_ID: 'shadman.com' #alibaba
M_Product_Code: 'WAP008'
Manufacturer_Code: '6567LOP'
Manufacturer_Model: 'Q-5499'
M_title: >
"Wholesale Custom Summer Fashion Women Leopard Casual Dress"
M_Description: |
- Age Group: 'Adults'
- Dress Type: 'Casual Dresses'
- Waistline: 'Natural'
- Neckline: 'V-neck'
- Dresses Length: 'Ankle-Length'
- Style: 'Casual'
- Silhouette: 'Loose'
- Season: 'summer'
- Sleeve Length: 'Full'
- Decoration: 'Embroidery'
- Supply Type: 'OEM Service'
- Material: '100% Polyester'
- Fabric Type: 'Chiffon'
- Technics: 'Printed'
- Feature: 'Anti-Static, Anti-Wrinkle, Breathable, Dry Cleaning, Eco-Friendly, Plus Size, Washable, Maternity, Mother of Bride'
- Place of Origin: 'Guangdong, China'
- Brand Name: 'New Feeling'
- Model Number: 'Q-5499'
- Sleeve Style: 'Long Sleeve'
- Sample Time: '5-7 days'
- Pattern Type: 'Floral, Leopard'
- Design: 'Long Sleeve'
Product-img-url: 'https://sc02.alicdn.com/kf/HTB1U36evZyYBuNkSnfoq6AWgVXad/221541222/HTB1U36evZyYBuNkSnfoq6AWgVXad.jpg'
Size: 176 #Height
Weight: null
List_Price: &price2 [5.50,12.50] #US_Doller
Sale_Price: *price2 #US_Doller
Avg_Rating: null
Category: 'Casual Dresses'
Title_report_id: null
Title_data_stat: null
Description_report_id : null
Description_data_stat: null
Review_report_id : null
Review_data_stat: null
Social_sent_report_id : null
Social_sent_data_stat: null
Pricing_trend_report_id : null
pricing_trend_data_stat: null
Price_comp_report_id : null
Price_comp_data_stat: null
On_sale_report_id : null
On_sale_data_stat: null
Geo_sales_trend_report_id : null
Geo_sales_trend_data_stat: null
Event_sales_report_id : null
Event_sales_data_stat: null
...
Есть ли альтруист, который может отладить Comparestring2.py и сделать такой же вывод, как Comparestring.py?