mdbq 0.0.8__py3-none-any.whl → 0.1.0__py3-none-any.whl

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.
@@ -12,6 +12,7 @@ import json
12
12
  from mdbq.mongo import mongo
13
13
  from mdbq.mysql import mysql
14
14
  from mdbq.config import get_myconf
15
+ from mdbq.dataframe import converter
15
16
  import datetime
16
17
  import time
17
18
  import re
@@ -69,7 +70,8 @@ class DataTypes:
69
70
  """
70
71
  if len(df) == 0:
71
72
  return
72
- df = self.convert_df_cols(df=df) # 清理 dataframe 列名的不合规字符
73
+ cv = converter.DataFrameConverter()
74
+ df = cv.convert_df_cols(df=df) # 清理 dataframe 列名的不合规字符
73
75
  dtypes = df.dtypes.apply(str).to_dict()
74
76
  dtypes = {db_name: {collection_name: dtypes}}
75
77
 
@@ -111,42 +113,6 @@ class DataTypes:
111
113
  self.datas.update(tips)
112
114
  return self.datas[db_name][collection_name] # 返回 df 的 dtypes
113
115
 
114
- def convert_df_cols(self, df):
115
- """
116
- 清理 dataframe 列名的不合规字符(mysql)
117
- 对数据类型进行转换(尝试将 object 类型转为 int 或 float)
118
- """
119
- # dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
120
- df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
121
- df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
122
- df.replace(to_replace=[','], value='', regex=True, inplace=True)
123
- df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
124
- df.replace(to_replace=['"'], value='', regex=True, inplace=True)
125
- cols = df.columns.tolist()
126
- for col in cols:
127
- # df[col] = df[col].apply(lambda x: re.sub('[="]', '', str(x)) if '="' in str(x) else x)
128
- # 百分比在某些数据库中不兼容, 转换百分比为小数
129
- df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
130
- # 尝试转换合适的数据类型
131
- if df[col].dtype == 'object':
132
- try:
133
- df[col] = df[col].astype(int) # 尝试转换 int
134
- except:
135
- df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
136
- if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
137
- df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
138
- # 清理列名, 在 mysql 里面列名不能含有某些特殊字符
139
- if '日期' in col or '时间' in col:
140
- try:
141
- df[col] = df[col].apply(lambda x: pd.to_datetime(x))
142
- except:
143
- pass
144
- new_col = col.lower()
145
- new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
146
- df.rename(columns={col: new_col}, inplace=True)
147
- df.fillna(0, inplace=True)
148
- return df
149
-
150
116
  def dtypes_to_file(self):
151
117
  """ 保存为本地 json 文件 """
152
118
  # print(self.datas)
@@ -801,40 +767,6 @@ class DatabaseUpdate:
801
767
  df, db_name, collection_name = data['数据主体'], data['数据库名'], data['集合名称']
802
768
  m.df_to_mysql(df=df, db_name=db_name, tabel_name=collection_name)
803
769
 
804
- def convert_df_cols(self, df):
805
- """"
806
- 清理 dataframe 列名的不合规字符(mysql)
807
- 对数据类型进行转换(尝试将 object 类型转为 int 或 float)
808
- """
809
- # dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
810
- df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
811
-
812
- cols = df.columns.tolist()
813
- df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
814
- df.replace(to_replace=[','], value='', regex=True, inplace=True)
815
- for col in cols:
816
- # 百分比在某些数据库中不兼容, 转换百分比为小数
817
- df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
818
- # 尝试转换合适的数据类型
819
- if df[col].dtype == 'object':
820
- try:
821
- df[col] = df[col].astype(int) # 尝试转换 int
822
- except:
823
- df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
824
- if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
825
- df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
826
- # 清理列名, 在 mysql 里面列名不能含有某些特殊字符
827
- if '日期' in col or '时间' in col:
828
- try:
829
- df[col] = df[col].apply(lambda x: pd.to_datetime(x))
830
- except:
831
- pass
832
- new_col = col.lower()
833
- new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
834
- df.rename(columns={col: new_col}, inplace=True)
835
- df.fillna(0, inplace=True)
836
- return df
837
-
838
770
  def new_unzip(self, path=None, is_move=None):
839
771
  """
840
772
  {解压并移除zip文件}
@@ -1020,7 +952,8 @@ def upload():
1020
952
  df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
1021
953
  if len(df) == 0:
1022
954
  continue
1023
- df = dt.convert_df_cols(df=df) # 清理列名和 df 中的非法字符
955
+ cv = converter.DataFrameConverter()
956
+ df = cv.convert_df_cols(df=df) # 清理列名和 df 中的非法字符
1024
957
  try:
1025
958
  df = df.astype(dtypes)
1026
959
  except Exception as e:
@@ -0,0 +1,4 @@
1
+
2
+
3
+
4
+ # dataframe 优化
@@ -0,0 +1,57 @@
1
+ # -*- coding:utf-8 -*-
2
+ import pandas as pd
3
+ import numpy as np
4
+ import re
5
+
6
+
7
+ class DataFrameConverter(object):
8
+ def __init__(self, df=pd.DataFrame({})):
9
+ self.df = df
10
+
11
+ def convert_df_cols(self, df=pd.DataFrame({})):
12
+ """
13
+ 清理 dataframe 列名的不合规字符(mysql)
14
+ 对数据类型进行转换(尝试将 object 类型转为 int 或 float)
15
+ """
16
+ if len(df) == 0:
17
+ df = self.df
18
+ if len(df) == 0:
19
+ return
20
+ # dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
21
+ df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
22
+ df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
23
+ df.replace(to_replace=[','], value='', regex=True, inplace=True)
24
+ df.replace(to_replace=['="'], value='', regex=True, inplace=True) # ="和"不可以放在一起清洗, 因为有: id=86785565
25
+ df.replace(to_replace=['"'], value='', regex=True, inplace=True)
26
+ cols = df.columns.tolist()
27
+ for col in cols:
28
+ # df[col] = df[col].apply(lambda x: re.sub('[="]', '', str(x)) if '="' in str(x) else x)
29
+ # 百分比在某些数据库中不兼容, 转换百分比为小数
30
+ df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
31
+ # 尝试转换合适的数据类型
32
+ if df[col].dtype == 'object':
33
+ try:
34
+ df[col] = df[col].astype(int) # 尝试转换 int
35
+ except:
36
+ df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
37
+ if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
38
+ df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
39
+ # 清理列名, 在 mysql 里面列名不能含有某些特殊字符
40
+ if '日期' in col or '时间' in col:
41
+ try:
42
+ df[col] = df[col].apply(lambda x: pd.to_datetime(x))
43
+ except:
44
+ pass
45
+ new_col = col.lower()
46
+ new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
47
+ df.rename(columns={col: new_col}, inplace=True)
48
+ df.fillna(0, inplace=True)
49
+ return df
50
+
51
+
52
+ if __name__ == '__main__':
53
+ df = pd.DataFrame(np.random.randn(5, 3), columns=['a', 'b', 'c'])
54
+ converter = DataFrameConverter()
55
+ df = converter.convert_df_cols(df)
56
+ print(df['a'].dtype)
57
+ print(df)
mdbq/mongo/mongo.py CHANGED
@@ -10,6 +10,7 @@ import pymongo
10
10
  from functools import wraps
11
11
  from concurrent.futures import ThreadPoolExecutor
12
12
  from mdbq.config import get_myconf
13
+ from mdbq.dataframe import converter
13
14
 
14
15
  warnings.filterwarnings('ignore')
15
16
 
@@ -209,15 +210,6 @@ class DownMongo:
209
210
  else:
210
211
  print(f'{now}正在下载数据 ({self.host}) {self.db_name}: {self.collection_name}, 数据区间: {self.start_date} ~ {self.end_date}')
211
212
 
212
- # self.start_date = datetime.datetime.now() - datetime.timedelta(days=self.days)
213
- # query = { # 读取数据库中指定时间区间的数据
214
- # '日期':
215
- # {
216
- # '$gte': self.start_date,
217
- # '$lte': self.end_date
218
- # },
219
- # }
220
- # _df = pd.DataFrame((list(_collection.find(query)))) # 将数据转换为 dataframe
221
213
  if not self.start_date:
222
214
  self.start_date = datetime.datetime.now() - datetime.timedelta(days=self.days)
223
215
  self.end_date = datetime.datetime.now()
@@ -236,17 +228,16 @@ class DownMongo:
236
228
  # print(doc)
237
229
  datas.append(doc)
238
230
  _df = pd.DataFrame(datas)
231
+ if len(_df) == 0:
232
+ print(f'查询的数据量: {len(_df)}, 森么都米有花生')
233
+ self.client.close()
234
+ return
235
+ if '_id' in _df.columns.tolist():
236
+ _df.drop('_id', axis=1, inplace=True)
239
237
 
240
- for col in _df.columns.tolist(): # 保存之前尝试转换数据类型
241
- if '日期' in col:
242
- _df[col] = _df[col].astype(str).apply(lambda x: ''.join(re.findall(r'(\d{4}-\d{2}-\d{2})', x)))
243
- _df[col] = pd.to_datetime(_df[col], format='%Y-%m-%d', errors='ignore') # 转换日期列
244
- elif '_id' in col:
245
- # _df['_id'] = _df['_id'].astype(str) # 将 '_id' 字段转换为字符串,因为它是一个 ObjectId 对象
246
- _df.drop('_id', axis=1, inplace=True)
247
- else:
248
- _df[col] = pd.to_numeric(_df[col], errors='ignore')
249
238
  print(f'查询的数据量: {len(_df)}')
239
+ cv = converter.DataFrameConverter()
240
+ _df = cv.convert_df_cols(_df)
250
241
  s_date = re.findall(r'(\d{4}-\d{2}-\d{2})', str(_df['日期'].values.min()))[0]
251
242
  e_date = re.findall(r'(\d{4}-\d{2}-\d{2})', str(_df['日期'].values.max()))[0]
252
243
  if not file_type.startswith('.'):
@@ -420,7 +411,8 @@ class UploadMongo:
420
411
  start_date = None
421
412
  end_date = None
422
413
 
423
- df = self.convert_df_cols(df=df) # 清理列名中的不合规字符
414
+ cv = converter.DataFrameConverter()
415
+ df = cv.convert_df_cols(df=df) # 清理列名中的不合规字符
424
416
  if '日期' in df.columns.tolist():
425
417
  # df['日期'] = df['日期'].apply(lambda x: pd.to_datetime(x))
426
418
  collections.create_index([('日期', -1)], background=True) # 必须, 创建索引, background 不阻塞
@@ -469,40 +461,6 @@ class UploadMongo:
469
461
 
470
462
  self.client.close() #
471
463
 
472
- def convert_df_cols(self, df):
473
- """
474
- 清理 dataframe 列名的不合规字符(mysql)
475
- 对数据类型进行转换(尝试将 object 类型转为 int 或 float)
476
- """
477
- # dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
478
- df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
479
-
480
- cols = df.columns.tolist()
481
- df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
482
- df.replace(to_replace=[','], value='', regex=True, inplace=True)
483
- for col in cols:
484
- # 百分比在某些数据库中不兼容, 转换百分比为小数
485
- df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
486
- # 尝试转换合适的数据类型
487
- if df[col].dtype == 'object':
488
- try:
489
- df[col] = df[col].astype(int) # 尝试转换 int
490
- except:
491
- df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
492
- if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
493
- df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
494
- # 清理列名, 在 mysql 里面列名不能含有某些特殊字符
495
- if '日期' in col or '时间' in col:
496
- try:
497
- df[col] = df[col].apply(lambda x: pd.to_datetime(x))
498
- except:
499
- pass
500
- new_col = col.lower()
501
- new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
502
- df.rename(columns={col: new_col}, inplace=True)
503
- df.fillna(0, inplace=True)
504
- return df
505
-
506
464
 
507
465
  class OptimizeDatas:
508
466
  """
mdbq/mysql/mysql.py CHANGED
@@ -12,6 +12,7 @@ from sqlalchemy import create_engine
12
12
  import os
13
13
  import calendar
14
14
  from mdbq.config import get_myconf
15
+ from mdbq.dataframe import converter
15
16
 
16
17
  warnings.filterwarnings('ignore')
17
18
 
@@ -67,7 +68,8 @@ class MysqlUpload:
67
68
  """
68
69
  db_name = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .]', '_', db_name)
69
70
  tabel_name = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .]', '_', tabel_name)
70
- df = self.convert_df_cols(df=df) # 清理列名中的不合规字符
71
+ cv = converter.DataFrameConverter()
72
+ df = cv.convert_df_cols(df=df) # 清理列名中的不合规字符
71
73
 
72
74
  connection = pymysql.connect(**self.config) # 连接数据库
73
75
  try:
@@ -182,42 +184,6 @@ class MysqlUpload:
182
184
  else:
183
185
  return 'mediumtext'
184
186
 
185
-
186
- def convert_df_cols(self, df):
187
- """
188
- 清理 dataframe 列名的不合规字符(mysql)
189
- 对数据类型进行转换(尝试将 object 类型转为 int 或 float)
190
- """
191
- # dtypes = df.dtypes.apply(str).to_dict() # 将 dataframe 数据类型转为字典形式
192
- df.replace([np.inf, -np.inf], 0, inplace=True) # 清理一些非法值
193
-
194
- cols = df.columns.tolist()
195
- df.replace(to_replace=['\\N', '-', '--', '', 'nan'], value=0, regex=False, inplace=True) # 替换掉特殊字符
196
- df.replace(to_replace=[','], value='', regex=True, inplace=True)
197
- for col in cols:
198
- # 百分比在某些数据库中不兼容, 转换百分比为小数
199
- df[col] = df[col].apply(lambda x: float(float((str(x).rstrip("%"))) / 100) if str(x).endswith('%') and '~' not in str(x) else x)
200
- # 尝试转换合适的数据类型
201
- if df[col].dtype == 'object':
202
- try:
203
- df[col] = df[col].astype(int) # 尝试转换 int
204
- except:
205
- df[col] = df[col].astype('float64', errors='ignore') # 尝试转换 float, 报错则忽略
206
- if df[col].dtype == 'float': # 对于小数类型, 保留 6 位小数
207
- df[col] = df[col].apply(lambda x: round(float(x), 6) if x != 0 else x)
208
- # 清理列名, 在 mysql 里面列名不能含有某些特殊字符
209
- if '日期' in col or '时间' in col:
210
- try:
211
- df[col] = df[col].apply(lambda x: pd.to_datetime(x))
212
- except:
213
- pass
214
- new_col = col.lower()
215
- new_col = re.sub(r'[\',,()()/=<>+\-*^"’\[\]~#|&% .;]', '_', new_col)
216
- df.rename(columns={col: new_col}, inplace=True)
217
- df.fillna(0, inplace=True)
218
- return df
219
-
220
-
221
187
  def upload_pandas(self, update_path, db_name, days=None):
222
188
  """
223
189
  专门用来上传 pandas数据源的全部文件, 跳过 '其他数据' or '京东数据集'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 0.0.8
3
+ Version: 0.1.0
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -1,7 +1,7 @@
1
1
  mdbq/__init__.py,sha256=Il5Q9ATdX8yXqVxtP_nYqUhExzxPC_qk_WXQ_4h0exg,16
2
2
  mdbq/__version__.py,sha256=y9Mp_8x0BCZSHsdLT_q5tX9wZwd5QgqrSIENLrb6vXA,62
3
3
  mdbq/aggregation/__init__.py,sha256=EeDqX2Aml6SPx8363J-v1lz0EcZtgwIBYyCJV6CcEDU,40
4
- mdbq/aggregation/aggregation.py,sha256=7Id0cZ5QR7rPR9srbNRv78lGBwQ7pQre65qYIhu89Ms,59498
4
+ mdbq/aggregation/aggregation.py,sha256=EbV1f3ExlBcbtAWE1R5qcNx5AE9NCZL3ENMqVCy5zHg,55618
5
5
  mdbq/aggregation/query_data.py,sha256=9E4dbeQAq7r1srlszP27X3jFiKtMmFc6lP965GHjQms,13368
6
6
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
7
7
  mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
@@ -12,12 +12,14 @@ mdbq/company/copysh.py,sha256=0exynzeqf85gCBQXAgKycVxddMhr0TjkFcBP_NK0QTA,15609
12
12
  mdbq/config/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
13
13
  mdbq/config/get_myconf.py,sha256=q6Pylsnh4-MsHP9JcX8IdlnGVWikz9hio1HI_qh6Wvs,6171
14
14
  mdbq/config/update_conf.py,sha256=YjGjjRchu5BcrmLJkoLjHEF2TbGOmsgCWX4LroXOYWQ,3455
15
+ mdbq/dataframe/__init__.py,sha256=2HtCN8AdRj53teXDqzysC1h8aPL-mMFy561ESmhehGQ,22
16
+ mdbq/dataframe/converter.py,sha256=VLG6Y0Ca_OkgpVkHDQU6AHSxGqISx6GsGiyDGHkXq0g,2668
15
17
  mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
16
18
  mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
17
19
  mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
18
- mdbq/mongo/mongo.py,sha256=hF93-kP2lxK4WY1KCdBBszLQ_I7W0mQQxZ7t4qU2w3A,32930
20
+ mdbq/mongo/mongo.py,sha256=AK028yQWPajf_A-PYY-NJTfWiGQJDpBwPY3aS6cOcHk,30431
19
21
  mdbq/mysql/__init__.py,sha256=A_DPJyAoEvTSFojiI2e94zP0FKtCkkwKP1kYUCSyQzo,11
20
- mdbq/mysql/mysql.py,sha256=H9onFYKSYRjdXghK_29Aj7vgvUgDHexJjIECrdxLbE0,29925
22
+ mdbq/mysql/mysql.py,sha256=HX3keNO-Hbpra3XNJtWbBwsD7pLHiKfM4ZQaSBksAkk,28149
21
23
  mdbq/mysql/s_query.py,sha256=bRnW8Cpy4fSsbMhzGCvjiK2kin9uamVumJC3nLAyjMg,5213
22
24
  mdbq/mysql/year_month_day.py,sha256=VgewoE2pJxK7ErjfviL_SMTN77ki8GVbTUcao3vFUCE,1523
23
25
  mdbq/other/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
@@ -28,7 +30,7 @@ mdbq/pbix/__init__.py,sha256=Trtfaynu9RjoTyLLYBN2xdRxTvm_zhCniUkVTAYwcjo,24
28
30
  mdbq/pbix/pbix_refresh.py,sha256=JUjKW3bNEyoMVfVfo77UhguvS5AWkixvVhDbw4_MHco,2396
29
31
  mdbq/pbix/refresh_all.py,sha256=wulHs4rivf4Mi0Pii2QR5Nk9-TBcvSwnCB_WH9QULKE,5939
30
32
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
31
- mdbq-0.0.8.dist-info/METADATA,sha256=dVu6kA6RtVWnfsNTWXnOv_d1TmKhM4Gw6PrypX9MF0E,245
32
- mdbq-0.0.8.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
33
- mdbq-0.0.8.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
34
- mdbq-0.0.8.dist-info/RECORD,,
33
+ mdbq-0.1.0.dist-info/METADATA,sha256=627YqHp57NZ-o4gylzObjtKU3DldI5Dl4rNpldzb8JU,245
34
+ mdbq-0.1.0.dist-info/WHEEL,sha256=cpQTJ5IWu9CdaPViMhC9YzF8gZuS5-vlfoFihTBC86A,91
35
+ mdbq-0.1.0.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
36
+ mdbq-0.1.0.dist-info/RECORD,,
File without changes