mdbq 2.6.1__py3-none-any.whl → 2.6.2__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.
@@ -93,6 +93,18 @@ class MysqlDatasQuery:
93
93
  username, password, host, port = get_myconf.select_config_values(target_service=target_service, database='mysql')
94
94
  self.download = s_query.QueryDatas(username=username, password=password, host=host, port=port)
95
95
 
96
+ @staticmethod
97
+ def try_except(func): # 在类内部定义一个异常处理方法
98
+ @wraps(func)
99
+ def wrapper(*args, **kwargs):
100
+ try:
101
+ return func(*args, **kwargs)
102
+ except Exception as e:
103
+ print(f'{func.__name__}, {e}') # 将异常信息返回
104
+
105
+ return wrapper
106
+
107
+ @try_except
96
108
  def tg_wxt(self):
97
109
  start_date, end_date = self.months_data(num=self.months)
98
110
  projection = {
@@ -118,6 +130,7 @@ class MysqlDatasQuery:
118
130
  )
119
131
  return df
120
132
 
133
+ @try_except
121
134
  def syj(self):
122
135
  start_date, end_date = self.months_data(num=self.months)
123
136
  projection = {
@@ -142,6 +155,7 @@ class MysqlDatasQuery:
142
155
  )
143
156
  return df
144
157
 
158
+ @try_except
145
159
  def tg_rqbb(self):
146
160
  start_date, end_date = self.months_data(num=self.months)
147
161
  projection = {
@@ -167,6 +181,7 @@ class MysqlDatasQuery:
167
181
  )
168
182
  return df
169
183
 
184
+ @try_except
170
185
  def tg_gjc(self):
171
186
  start_date, end_date = self.months_data(num=self.months)
172
187
  projection = {
@@ -193,6 +208,7 @@ class MysqlDatasQuery:
193
208
  )
194
209
  return df
195
210
 
211
+ @try_except
196
212
  def tg_cjzb(self):
197
213
  start_date, end_date = self.months_data(num=self.months)
198
214
  projection = {
@@ -220,6 +236,7 @@ class MysqlDatasQuery:
220
236
  )
221
237
  return df
222
238
 
239
+ @try_except
223
240
  def pxb_zh(self):
224
241
  start_date, end_date = self.months_data(num=self.months)
225
242
  projection = {
@@ -245,6 +262,7 @@ class MysqlDatasQuery:
245
262
  )
246
263
  return df
247
264
 
265
+ @try_except
248
266
  def idbm(self):
249
267
  """ 用生意经日数据制作商品 id 和编码对照表 """
250
268
  data_values = self.download.columns_to_list(
@@ -255,6 +273,7 @@ class MysqlDatasQuery:
255
273
  df = pd.DataFrame(data=data_values)
256
274
  return df
257
275
 
276
+ @try_except
258
277
  def sp_picture(self):
259
278
  """ 用生意经日数据制作商品 id 和编码对照表 """
260
279
  data_values = self.download.columns_to_list(
@@ -265,6 +284,7 @@ class MysqlDatasQuery:
265
284
  df = pd.DataFrame(data=data_values)
266
285
  return df
267
286
 
287
+ @try_except
268
288
  def dplyd(self):
269
289
  """ 新旧版取的字段是一样的 """
270
290
  start_date, end_date = self.months_data(num=self.months)
@@ -288,6 +308,7 @@ class MysqlDatasQuery:
288
308
  )
289
309
  return df
290
310
 
311
+ @try_except
291
312
  def dplyd_old(self):
292
313
  start_date, end_date = self.months_data(num=self.months)
293
314
  projection = {
@@ -310,6 +331,7 @@ class MysqlDatasQuery:
310
331
  )
311
332
  return df
312
333
 
334
+ @try_except
313
335
  def sp_cost(self):
314
336
  """ 电商定价 """
315
337
  data_values = self.download.columns_to_list(
@@ -320,6 +342,7 @@ class MysqlDatasQuery:
320
342
  df = pd.DataFrame(data=data_values)
321
343
  return df
322
344
 
345
+ @try_except
323
346
  def jdjzt(self):
324
347
  start_date, end_date = self.months_data(num=self.months)
325
348
  projection = {
@@ -346,6 +369,8 @@ class MysqlDatasQuery:
346
369
  projection=projection,
347
370
  )
348
371
  return df
372
+
373
+ @try_except
349
374
  def jdqzyx(self):
350
375
  start_date, end_date = self.months_data(num=self.months)
351
376
  projection = {
@@ -368,6 +393,8 @@ class MysqlDatasQuery:
368
393
  projection=projection,
369
394
  )
370
395
  return df
396
+
397
+ @try_except
371
398
  def jd_gjc(self):
372
399
  start_date, end_date = self.months_data(num=self.months)
373
400
  projection = {
@@ -401,6 +428,8 @@ class MysqlDatasQuery:
401
428
  projection=projection,
402
429
  )
403
430
  return df
431
+
432
+ @try_except
404
433
  def sku_sales(self):
405
434
  start_date, end_date = self.months_data(num=self.months)
406
435
  projection = {
@@ -422,6 +451,8 @@ class MysqlDatasQuery:
422
451
  projection=projection,
423
452
  )
424
453
  return df
454
+
455
+ @try_except
425
456
  def spu_sales(self):
426
457
  start_date, end_date = self.months_data(num=self.months)
427
458
  projection = {
@@ -453,6 +484,7 @@ class MysqlDatasQuery:
453
484
  start_date = f'{start_date.year}-{start_date.month}-01' # 替换为 n 月以前的第一天
454
485
  return pd.to_datetime(start_date), pd.to_datetime(end_date)
455
486
 
487
+ @try_except
456
488
  def tm_search(self):
457
489
  start_date, end_date = self.months_data(num=self.months)
458
490
  projection = {
@@ -476,6 +508,7 @@ class MysqlDatasQuery:
476
508
  )
477
509
  return df
478
510
 
511
+ @try_except
479
512
  def zb_ccfx(self):
480
513
  start_date, end_date = self.months_data(num=self.months)
481
514
  projection = {
@@ -520,6 +553,7 @@ class MysqlDatasQuery:
520
553
  )
521
554
  return df
522
555
 
556
+ @try_except
523
557
  def tg_by_day(self):
524
558
  """
525
559
  汇总各个店铺的推广数据,按日汇总
@@ -689,6 +723,7 @@ class MysqlDatasQuery:
689
723
  df = pd.concat(_datas, axis=0, ignore_index=True)
690
724
  return df
691
725
 
726
+ @try_except
692
727
  def aikucun_bd_spu(self):
693
728
  start_date, end_date = self.months_data(num=self.months)
694
729
  projection = {
@@ -736,6 +771,7 @@ class MysqlDatasQuery:
736
771
  )
737
772
  return df
738
773
 
774
+ @try_except
739
775
  def dmp_crowd(self):
740
776
  start_date, end_date = self.months_data(num=self.months)
741
777
  projection = {
@@ -1497,6 +1533,7 @@ class GroupBy:
1497
1533
  print(f'<{table_name}>: Groupby 类尚未配置,数据为空')
1498
1534
  return pd.DataFrame({})
1499
1535
 
1536
+ @try_except
1500
1537
  def ret_keyword(self, keyword, as_file=False):
1501
1538
  """ 推广关键词报表,关键词分类, """
1502
1539
  datas = [
@@ -1664,6 +1701,7 @@ class GroupBy:
1664
1701
  break
1665
1702
  return result
1666
1703
 
1704
+ @try_except
1667
1705
  def set_crowd(self, keyword, as_file=False):
1668
1706
  """ 推广人群报表,人群分类, """
1669
1707
  result_a = re.findall('_a$|_a_|_ai|^a_', str(keyword), re.IGNORECASE)
@@ -1699,6 +1737,7 @@ class GroupBy:
1699
1737
  if not is_res:
1700
1738
  return ''
1701
1739
 
1740
+ @try_except
1702
1741
  def set_crowd2(self, keyword, as_file=False):
1703
1742
  """ 推广人群报表,人群分类, """
1704
1743
  datas = [
@@ -1796,7 +1835,7 @@ class GroupBy:
1796
1835
  break
1797
1836
  return result
1798
1837
 
1799
- # @try_except
1838
+ @try_except
1800
1839
  def performance(self, bb_tg=True):
1801
1840
  # print(self.data_tgyj)
1802
1841
  tg, syj, idbm, pic, cost = (
@@ -1832,6 +1871,8 @@ class GroupBy:
1832
1871
  df['毛利率'] = df.apply(lambda x: round((x['销售额'] - x['商品成本']) / x['销售额'], 4) if x['销售额'] > 0 else 0, axis=1)
1833
1872
  df['盈亏'] = df.apply(lambda x: x['商品毛利'] - x['花费'], axis=1)
1834
1873
  return df
1874
+
1875
+ @try_except
1835
1876
  def performance_concat(self, bb_tg=True):
1836
1877
  tg, zb, pxb = self.data_tgyj['天猫汇总表调用'], self.data_tgyj['天猫_超级直播'], self.data_tgyj['天猫_品销宝账户报表']
1837
1878
  zb.rename(columns={
@@ -1880,6 +1921,7 @@ class GroupBy:
1880
1921
  )
1881
1922
  return df
1882
1923
 
1924
+ @try_except
1883
1925
  def performance_jd(self, jd_tg=True):
1884
1926
  jdtg, sku_sales = self.data_jdtg['京东_京准通'], self.data_jdtg['京东_sku_商品明细']
1885
1927
  jdtg = jdtg.groupby(['日期', '跟单sku id'],
@@ -2285,6 +2327,6 @@ def main():
2285
2327
 
2286
2328
 
2287
2329
  if __name__ == '__main__':
2288
- data_aggregation(service_databases=[{'company': 'mysql'}], months=24, is_juhe=False) # 正常的聚合所有数据
2330
+ data_aggregation(service_databases=[{'company': 'mysql'}], months=0, is_juhe=False) # 正常的聚合所有数据
2289
2331
  # data_aggregation_one(service_databases=[{'company': 'mysql'}], months=1) # 单独聚合某一个数据库,具体库进函数编辑
2290
2332
  # optimize_data.op_data(service_databases=[{'company': 'mysql'}], days=3650) # 立即启动对聚合数据的清理工作
@@ -89,15 +89,30 @@ class DataClean:
89
89
  path = self.path
90
90
  report_names = [
91
91
  {
92
- '文件简称': '商品排行', # 文件名中包含的字符
93
- '数据库名': '天猫_生意参谋3',
92
+ '文件简称': '商品排行_', # 文件名中包含的字符
93
+ '数据库名': '生意参谋3',
94
94
  '集合名称': '商品排行',
95
95
  },
96
96
  {
97
- '文件简称': '店铺来源_来源构成_万里马官方旗舰店', # 文件名中包含的字符
98
- '数据库名': '天猫_生意参谋3',
97
+ '文件简称': '店铺来源_来源构成_', # 文件名中包含的字符
98
+ '数据库名': '生意参谋3',
99
99
  '集合名称': '店铺流量来源构成',
100
100
  },
101
+ {
102
+ '文件简称': '商品类目属性_', # 文件名中包含的字符
103
+ '数据库名': '生意参谋3',
104
+ '集合名称': '商品类目属性',
105
+ },
106
+ {
107
+ '文件简称': '商品主图视频_', # 文件名中包含的字符
108
+ '数据库名': '生意参谋3',
109
+ '集合名称': '商品主图视频',
110
+ },
111
+ {
112
+ '文件简称': '商品sku属性_', # 文件名中包含的字符
113
+ '数据库名': '生意参谋3',
114
+ '集合名称': '商品sku',
115
+ },
101
116
  ]
102
117
  for root, dirs, files in os.walk(path, topdown=False):
103
118
  for name in files:
@@ -126,7 +141,7 @@ class DataClean:
126
141
  is_continue = True
127
142
  if not is_continue:
128
143
  continue
129
- if name.endswith('.xls') and '商品排行_万里马官方旗舰店' in name:
144
+ if name.endswith('.xls') and '商品排行_' in name:
130
145
  df = pd.read_excel(os.path.join(root, name), header=4)
131
146
  if len(df) == 0:
132
147
  print(f'{name} 报表数据为空')
@@ -135,15 +150,20 @@ class DataClean:
135
150
  df.replace(to_replace=[','], value='', regex=True, inplace=True)
136
151
  df.rename(columns={'统计日期': '日期', '商品ID': '商品id'}, inplace=True)
137
152
  shop_name = re.findall(r'_([\u4e00-\u9fffA-Za-z]+店)', name)[0]
138
- df.insert(loc=1, column='店铺名称', value=shop_name)
153
+ if '店铺名称' not in df.columns.tolist():
154
+ df.insert(loc=1, column='店铺名称', value=shop_name)
139
155
  new_name = f'py_xg_{os.path.splitext(name)[0]}.csv'
140
156
  self.save_to_csv(df, root, new_name, encoding='utf-8_sig')
141
157
  os.remove(os.path.join(root, name))
142
- elif name.endswith('.csv') and '_来源构成_万里马官方旗舰店' in name:
158
+ elif name.endswith('.csv') and '_来源构成_' in name:
143
159
  df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
144
160
  new_name = f'py_xg_{os.path.splitext(name)[0]}.csv'
145
161
  self.save_to_csv(df, root, new_name, encoding='utf-8_sig')
146
162
  os.remove(os.path.join(root, name))
163
+ elif name.endswith('.csv') and ('商品类目属性' in name or '商品主图视频' in name or '商品sku属性' in name):
164
+ df = pd.read_csv(os.path.join(root, name), encoding='utf-8_sig', header=0, na_filter=False)
165
+ new_name = f'py_xg_{os.path.splitext(name)[0]}.csv'
166
+ os.rename(os.path.join(root, name), os.path.join(root, new_name))
147
167
 
148
168
  # 将数据传入 self.datas 等待更新进数据库
149
169
  if not db_name or not collection_name:
@@ -804,16 +824,13 @@ class DataClean:
804
824
  if name.endswith('.xlsx') and '商品素材_' in name:
805
825
  shop_name = re.findall(r'_([\u4e00-\u9fffA-Za-z]+店)_', name)[0]
806
826
  df = pd.read_excel(os.path.join(root, name), header=0)
807
- df.insert(loc=1, column='店铺名称', value=shop_name)
827
+ if '店铺名称' not in df.columns.tolist():
828
+ df.insert(loc=1, column='店铺名称', value=shop_name)
808
829
  new_name = f'py_xg_{name}'
809
830
  df.to_excel(os.path.join(upload_path, new_name),
810
831
  index=False, header=True, engine='openpyxl', freeze_panes=(1, 0))
811
- if '官方旗舰店' in name:
812
- db_name = '属性设置3'
813
- collection_name = '商品素材_天猫'
814
- elif '官方企业店' in name:
815
- db_name = '属性设置3'
816
- collection_name = '商品素材_淘宝'
832
+ db_name = '属性设置3'
833
+ collection_name = '商品素材'
817
834
  os.remove(os.path.join(root, name))
818
835
 
819
836
  # 将数据传入 self.datas 等待更新进数据库
@@ -881,11 +898,15 @@ class DataClean:
881
898
  if 'py_xg' not in name: # 排除非目标文件
882
899
  continue
883
900
 
884
- if name.endswith('.csv') and '商品排行_万里马官方旗舰店' in name:
885
- t_path = os.path.join(self.source_path, '天猫_生意参谋', '商品排行')
901
+ if name.endswith('.csv') and '商品排行_' in name:
902
+ t_path = os.path.join(self.source_path, '生意参谋', '商品排行')
903
+ bib(t_path, _as_month=True)
904
+ elif name.endswith('.csv') and '店铺来源_来源构成_' in name:
905
+ t_path = os.path.join(self.source_path, '生意参谋', '店铺流量来源')
886
906
  bib(t_path, _as_month=True)
887
- elif name.endswith('.csv') and '店铺来源_来源构成_万里马官方旗舰店' in name:
888
- t_path = os.path.join(self.source_path, '天猫_生意参谋', '店铺流量来源')
907
+ elif name.endswith('.csv') and (
908
+ '商品类目属性' in name or '商品主图视频' in name or '商品sku属性' in name):
909
+ t_path = os.path.join(self.source_path, '生意参谋', '商品属性')
889
910
  bib(t_path, _as_month=True)
890
911
 
891
912
  def move_dmp(self, path=None, is_except=[]):
@@ -1097,10 +1118,10 @@ class DataClean:
1097
1118
  t_path = os.path.join(self.source_path, '天猫推广报表', '品销宝', '定向人群报表')
1098
1119
  bib(t_path, _as_month=True)
1099
1120
  elif name.endswith('xlsx') and '商品素材_万里马官方旗舰店' in name:
1100
- t_path = os.path.join(self.source_path, '商品素材', '天猫')
1121
+ t_path = os.path.join(self.source_path, '商品素材')
1101
1122
  bib(t_path, _as_month=True)
1102
1123
  elif name.endswith('xlsx') and '商品素材_万里马官方企业店' in name:
1103
- t_path = os.path.join(self.source_path, '商品素材', '淘宝')
1124
+ t_path = os.path.join(self.source_path, '商品素材')
1104
1125
  bib(t_path, _as_month=True)
1105
1126
 
1106
1127
  # @try_except
@@ -1400,7 +1421,7 @@ def main(service_databases=None, is_mysql=False):
1400
1421
  '天猫_推广数据3',
1401
1422
  '淘宝_推广数据3',
1402
1423
  # '市场数据3',
1403
- '天猫_生意参谋3',
1424
+ '生意参谋3',
1404
1425
  '天猫_生意经3',
1405
1426
  # '淘宝_生意经3',
1406
1427
  ],
@@ -47,7 +47,7 @@ class DataFrameConverter(object):
47
47
  try:
48
48
  # 百分比在某些数据库中不兼容, 转换百分比为小数, # 转百分比的列不能含有中文或特殊字符
49
49
  df[col] = df[col].apply(
50
- lambda x: float(float((str(x).rstrip("%"))) / 100) if re.findall(r'^\d+\.?\d*%', str(x)) else x)
50
+ lambda x: float(float((str(x).rstrip("%"))) / 100) if re.findall(r'^\d+\.?\d*%$', str(x)) else x)
51
51
  except Exception as e:
52
52
  print(f'留意错误信息: 位于列 -> {col} -> {e}')
53
53
 
@@ -94,5 +94,5 @@ if __name__ == '__main__':
94
94
  # print(df['a'].dtype)
95
95
  # print(df)
96
96
  pattern = '1540%'
97
- pattern = re.findall(r'^\d+\.?\d*%', pattern)
97
+ pattern = re.findall(r'^\d+\.?\d*%$', pattern)
98
98
  print(pattern)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mdbq
3
- Version: 2.6.1
3
+ Version: 2.6.2
4
4
  Home-page: https://pypi.org/project/mdbsql
5
5
  Author: xigua,
6
6
  Author-email: 2587125111@qq.com
@@ -5,11 +5,11 @@ mdbq/aggregation/aggregation.py,sha256=ZBsaQbazp2J9rQDoTvwRNav1O4g3PrZue31_6iM4k
5
5
  mdbq/aggregation/df_types.py,sha256=U9i3q2eRPTDY8qAPTw7irzu-Tlg4CIySW9uYro81wdk,8125
6
6
  mdbq/aggregation/mysql_types.py,sha256=DQYROALDiwjJzjhaJfIIdnsrNs11i5BORlj_v6bp67Y,11062
7
7
  mdbq/aggregation/optimize_data.py,sha256=gdScrgTAb6RbXHZy1LitX7lggMGn1GTLhkYSgztfwew,4903
8
- mdbq/aggregation/query_data.py,sha256=xVqQBc0kDnm-1giKmAWoKj_obY4GiipgEXY12NhK2AQ,103635
8
+ mdbq/aggregation/query_data.py,sha256=6hEmrqPiI5yUuQyTP5_w9n9aVoOXutuJK6Z_jRlsV_s,104438
9
9
  mdbq/bdup/__init__.py,sha256=AkhsGk81SkG1c8FqDH5tRq-8MZmFobVbN60DTyukYTY,28
10
10
  mdbq/bdup/bdup.py,sha256=LAV0TgnQpc-LB-YuJthxb0U42_VkPidzQzAagan46lU,4234
11
11
  mdbq/clean/__init__.py,sha256=A1d6x3L27j4NtLgiFV5TANwEkLuaDfPHDQNrPBbNWtU,41
12
- mdbq/clean/clean_upload.py,sha256=kkogtWDHE28gyJ2ZgwCqhygbhIrQ9Wcs-G9tFEiKwQc,76837
12
+ mdbq/clean/clean_upload.py,sha256=t_vUPUuDrWAKxdJO8Ptcu9H6aSGzAgBKg9sur-Mr0oM,77929
13
13
  mdbq/clean/data_clean.py,sha256=ucfslhqXVZoH2QaXHSAWDky0GhIvH9f4GeNaHg4SrFE,104790
14
14
  mdbq/company/__init__.py,sha256=qz8F_GsP_pMB5PblgJAUAMjasuZbOEp3qQOCB39E8f0,21
15
15
  mdbq/company/copysh.py,sha256=NvlXCBZBcO2GIT5nLRYYqhOyHWM1-1RE7DHvgbj6jmQ,19723
@@ -20,7 +20,7 @@ mdbq/config/products.py,sha256=hN9UMkM6j76HYMulTYdtr3mOhh9QdpvvrLH14a_mbFY,5980
20
20
  mdbq/config/set_support.py,sha256=xkZCX6y9Bq1ppBpJAofld4B2YtchA7fl0eT3dx3CrSI,777
21
21
  mdbq/config/update_conf.py,sha256=taL3ZqKgiVWwUrDFuaYhim9a72Hm4BHRhhDscJTziR8,4535
22
22
  mdbq/dataframe/__init__.py,sha256=2HtCN8AdRj53teXDqzysC1h8aPL-mMFy561ESmhehGQ,22
23
- mdbq/dataframe/converter.py,sha256=SJLZ96f6QBxnPcaaKDi3UOLNk0b7O6aWLAyDOMiSy80,4312
23
+ mdbq/dataframe/converter.py,sha256=KNHxk3dNw1ycOpcnTg83yHrV9B3pvoYwK3Wc_bzk2NE,4314
24
24
  mdbq/log/__init__.py,sha256=Mpbrav0s0ifLL7lVDAuePEi1hJKiSHhxcv1byBKDl5E,15
25
25
  mdbq/log/mylogger.py,sha256=oaT7Bp-Hb9jZt52seP3ISUuxVcI19s4UiqTeouScBO0,3258
26
26
  mdbq/mongo/__init__.py,sha256=SILt7xMtQIQl_m-ik9WLtJSXIVf424iYgCfE_tnQFbw,13
@@ -42,7 +42,7 @@ mdbq/req_post/__init__.py,sha256=jso1oHcy6cJEfa7udS_9uO5X6kZLoPBF8l3wCYmr5dM,18
42
42
  mdbq/req_post/req_tb.py,sha256=PexWSCPJNM6Tv0ol4lAWIhlOwsAr_frnjtcdSHCFiek,36179
43
43
  mdbq/spider/__init__.py,sha256=RBMFXGy_jd1HXZhngB2T2XTvJqki8P_Fr-pBcwijnew,18
44
44
  mdbq/spider/aikucun.py,sha256=3EjeTPbwk_qLGMVqDhBZoEPGfD2oM-SBiODjxLL3A8U,16883
45
- mdbq-2.6.1.dist-info/METADATA,sha256=AyfNicxlm5jVQSJdDDP1w9H2XCa8LZzpA2VXYfR887Q,245
46
- mdbq-2.6.1.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
47
- mdbq-2.6.1.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
48
- mdbq-2.6.1.dist-info/RECORD,,
45
+ mdbq-2.6.2.dist-info/METADATA,sha256=YWpQrR1j4lfvAEEea_-hzDw7IblqooNfsPi6JcB_d8M,245
46
+ mdbq-2.6.2.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
47
+ mdbq-2.6.2.dist-info/top_level.txt,sha256=2FQ-uLnCSB-OwFiWntzmwosW3X2Xqsg0ewh1axsaylA,5
48
+ mdbq-2.6.2.dist-info/RECORD,,
File without changes