mdbq 1.8.0__tar.gz → 1.8.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. {mdbq-1.8.0 → mdbq-1.8.1}/PKG-INFO +1 -1
  2. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/other/sku_picture.py +166 -1
  3. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq.egg-info/PKG-INFO +1 -1
  4. {mdbq-1.8.0 → mdbq-1.8.1}/setup.py +1 -1
  5. {mdbq-1.8.0 → mdbq-1.8.1}/README.txt +0 -0
  6. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/__init__.py +0 -0
  7. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/__version__.py +0 -0
  8. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/aggregation/__init__.py +0 -0
  9. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/aggregation/aggregation.py +0 -0
  10. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/aggregation/df_types.py +0 -0
  11. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/aggregation/mysql_types.py +0 -0
  12. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/aggregation/optimize_data.py +0 -0
  13. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/aggregation/query_data.py +0 -0
  14. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/bdup/__init__.py +0 -0
  15. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/bdup/bdup.py +0 -0
  16. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/clean/__init__.py +0 -0
  17. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/clean/data_clean.py +0 -0
  18. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/company/__init__.py +0 -0
  19. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/company/copysh.py +0 -0
  20. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/config/__init__.py +0 -0
  21. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/config/get_myconf.py +0 -0
  22. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/config/products.py +0 -0
  23. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/config/set_support.py +0 -0
  24. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/config/update_conf.py +0 -0
  25. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/dataframe/__init__.py +0 -0
  26. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/dataframe/converter.py +0 -0
  27. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/log/__init__.py +0 -0
  28. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/log/mylogger.py +0 -0
  29. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/mongo/__init__.py +0 -0
  30. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/mongo/mongo.py +0 -0
  31. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/mysql/__init__.py +0 -0
  32. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/mysql/mysql.py +0 -0
  33. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/mysql/s_query.py +0 -0
  34. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/mysql/year_month_day.py +0 -0
  35. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/other/__init__.py +0 -0
  36. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/other/porxy.py +0 -0
  37. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/other/pov_city.py +0 -0
  38. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/other/ua_sj.py +0 -0
  39. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/pbix/__init__.py +0 -0
  40. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/pbix/pbix_refresh.py +0 -0
  41. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/pbix/refresh_all.py +0 -0
  42. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq/spider/__init__.py +0 -0
  43. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq.egg-info/SOURCES.txt +0 -0
  44. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq.egg-info/dependency_links.txt +0 -0
  45. {mdbq-1.8.0 → mdbq-1.8.1}/mdbq.egg-info/top_level.txt +0 -0
  46. {mdbq-1.8.0 → mdbq-1.8.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.8.0
3
+ Version: 1.8.1
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -5,6 +5,7 @@ import json
5
5
  import os
6
6
  import platform
7
7
  import random
8
+ from dateutil.relativedelta import relativedelta
8
9
  import re
9
10
  import time
10
11
  import warnings
@@ -18,6 +19,15 @@ from selenium.webdriver.chrome.service import Service
18
19
  from mdbq.config import set_support
19
20
  from mdbq.config import get_myconf
20
21
  from mdbq.mysql import mysql
22
+ from mdbq.mysql import s_query
23
+ import ua_sj
24
+ import requests
25
+ from openpyxl import load_workbook
26
+ # from openpyxl.drawing.image import Image
27
+ import openpyxl
28
+ from PIL import Image as PILImage
29
+ from io import BytesIO
30
+ from openpyxl.utils import get_column_letter
21
31
 
22
32
  warnings.filterwarnings('ignore')
23
33
 
@@ -444,16 +454,86 @@ class SkuPicture:
444
454
 
445
455
  if results:
446
456
  self.df = pd.concat(results)
457
+ self.df = self.df[['sku图片链接'] != '0']
447
458
 
448
459
  def read_df(self):
449
460
  path = os.path.join(self.path, self.filename)
450
461
  df = pd.read_excel(path, header=0)
451
462
  df = df[['商品id', '商家编码', '是否新增']]
463
+ df['是否新增'].fillna(0, inplace=True)
452
464
  df = df.astype({'是否新增': int})
453
465
  df = df[df['是否新增'] == 1]
454
466
  self.urls = df.to_dict('records')
455
467
 
456
468
 
469
+ class DownloadPicture():
470
+ """
471
+ 从数据库中下载数据
472
+ """
473
+ def __init__(self, service_name):
474
+ # target_service 从哪个服务器下载数据
475
+ self.months = 0 # 下载几个月数据, 0 表示当月, 1 是上月 1 号至今
476
+ # 实例化一个下载类
477
+ username, password, host, port = get_myconf.select_config_values(target_service=service_name,
478
+ database='mysql')
479
+ self.download = s_query.QueryDatas(username=username, password=password, host=host, port=port)
480
+ self.df = pd.DataFrame()
481
+ self.headers = {'User-Agent': ua_sj.get_ua()}
482
+ self.save_path = '/Users/xigua/Downloads/sku图片链接'
483
+ self.filename = ''
484
+ if not os.path.exists(self.save_path):
485
+ os.mkdir(self.save_path)
486
+
487
+ def get_df_from_service(self):
488
+ start_date, end_date = self.months_data(num=self.months)
489
+ projection = {
490
+ '商品id': 1,
491
+ '商家编码': 1,
492
+ 'sku编码': 1,
493
+ 'sku名称': 1,
494
+ 'sku图片链接': 1
495
+ }
496
+ self.df = self.download.data_to_df(
497
+ db_name='属性设置2',
498
+ table_name='天猫商品sku信息',
499
+ start_date=start_date,
500
+ end_date=end_date,
501
+ projection=projection,
502
+ )
503
+
504
+ def download_data(self):
505
+ dict_data = self.df.to_dict('records')
506
+ num = len(dict_data)
507
+ i = 0
508
+ for data in dict_data:
509
+ url = data['sku图片链接']
510
+ sku_name = re.sub('/', '_', data['sku名称'])
511
+ self.filename = f'{data['商品id']}_{data['商家编码']}_{data['sku编码']}_{sku_name}.jpg'
512
+ if os.path.isfile(os.path.join(self.save_path, self.filename)):
513
+ i += 1
514
+ continue
515
+ if 'https' not in url:
516
+ i += 1
517
+ continue
518
+
519
+ print(f'正在下载: {i}/{num}, {data['sku编码']}')
520
+ self.headers.update({'User-Agent': ua_sj.get_ua()})
521
+ res = requests.get(url, headers=self.headers) # 下载图片到内存
522
+ # 保存图片到本地文件夹
523
+ with open(os.path.join(self.save_path, self.filename), 'wb') as f:
524
+ f.write(res.content)
525
+ i += 1
526
+ time.sleep(0.5)
527
+
528
+ @staticmethod
529
+ def months_data(num=0, end_date=None):
530
+ """ 读取近 num 个月的数据, 0 表示读取当月的数据 """
531
+ if not end_date:
532
+ end_date = datetime.datetime.now()
533
+ start_date = end_date - relativedelta(months=num) # n 月以前的今天
534
+ start_date = f'{start_date.year}-{start_date.month}-01' # 替换为 n 月以前的第一天
535
+ return pd.to_datetime(start_date), pd.to_datetime(end_date)
536
+
457
537
  def main(service_name, database):
458
538
  if not os.path.exists(Share_Path):
459
539
  print(f'当前系统环境不支持')
@@ -483,5 +563,90 @@ def main(service_name, database):
483
563
  ) # 3. 回传数据库
484
564
 
485
565
 
566
+ def main2(service_name, database):
567
+ d = DownloadPicture(service_name=service_name)
568
+ d.get_df_from_service()
569
+ d.download_data()
570
+
571
+
572
+ class InsertPicture():
573
+ def __init__(self):
574
+ self.file = '/Users/xigua/Downloads/test.xlsx'
575
+ self.path = '/Users/xigua/Downloads/sku图片链接'
576
+ self.pic_datas = []
577
+ self.header = 0 # sku 的标题栏起始行数
578
+
579
+ def insert_data(self):
580
+ self.get_filename()
581
+ # sku_in_files = [item['sku'] for item in self.pic_datas]
582
+ # print(len(sku_in_files))
583
+
584
+ # df = pd.read_excel(self.file, header=self.header)
585
+ # cols = df.columns.tolist()
586
+ # print(cols)
587
+
588
+ workbook = load_workbook(self.file)
589
+ sheet = workbook.active
590
+ rows = sheet.max_row # 总行数
591
+ columns = sheet.max_column # 总列数
592
+ # print(columns)
593
+ # print(rows)
594
+ sheet.insert_cols(0, 1) # 在第0列开始插入1列空白列
595
+ sheet['A1'] = '商品图片'
596
+
597
+ for col in range(1, columns+1):
598
+ for row in range(1, rows+1):
599
+ # print(f'第{col}列, 第{row}行...')
600
+ value = sheet.cell(row=row, column=col).value
601
+ if value:
602
+ for data in self.pic_datas:
603
+ if str(value) == data['sku']:
604
+ print(value, data['文件名称'])
605
+ image_path = os.path.join(data['文件路径'], data['文件名称'])
606
+ img = PILImage.open(image_path)
607
+ output = BytesIO()
608
+ img.save(output, format='JPEG')
609
+ image_data = output.getvalue()
610
+
611
+ # 调整图片大小
612
+ img_resized = img.resize((128, 128)) # 调整为128x128大小
613
+ output_resized = BytesIO()
614
+ img_resized.save(output_resized, format='JPEG')
615
+ image_data_resized = output_resized.getvalue()
616
+ col_letter = 'A'
617
+ sheet.add_image(openpyxl.drawing.image.Image(sheet, image_data_resized), f'{col_letter}{row}')
618
+ break
619
+
620
+ # workbook.save(self.file)
621
+ # print(filenames)
622
+ # sheet.insert_cols(0, 1) # 在第0列开始插入1列空白列
623
+ # sheet['A1'] = '商品图片'
624
+
625
+
626
+ # col_letter = get_column_letter(col) # 将数字索引转换为列标签 A、B、C、D...
627
+ # sheet.column_dimensions[col_letter].width = 10
628
+ # sheet.row_dimensions[row].height = 80
629
+ # # sheet.cell(row=row, column=col).value = "" # 删除原内容
630
+ # now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S ")
631
+ # print(f'{now}正在转换: 第{col}列, 第{row}行..')
632
+
633
+ def get_filename(self):
634
+ for root, dirs, files in os.walk(self.path, topdown=False):
635
+ for name in files:
636
+ if name.endswith('.jpg'):
637
+ sku_id = re.findall(r'\d+_\d+_(\d+)_|\d+_\d+_(\d+-\d+)_|\d+_\d+_([A-Za-z]+\d+)_', name)
638
+ sku_id = [item for item in sku_id[0] if item != '']
639
+ self.pic_datas.append({'文件路径': root, '文件名称': name, 'sku': sku_id[0]})
640
+
641
+
642
+ def main3():
643
+ p = InsertPicture()
644
+ p.header = 1
645
+ p.insert_data()
646
+
647
+
648
+
486
649
  if __name__ == '__main__':
487
- main(service_name='company', database='mysql')
650
+ # main(service_name='company', database='mysql')
651
+ # main2(service_name='company', database='mysql')
652
+ main3()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 1.8.0
3
+ Version: 1.8.1
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -3,7 +3,7 @@
3
3
  from setuptools import setup, find_packages
4
4
 
5
5
  setup(name='mdbq',
6
- version='1.8.0',
6
+ version='1.8.1',
7
7
  author='xigua, ',
8
8
  author_email="2587125111@qq.com",
9
9
  url='https://pypi.org/project/mdbsql',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes