py2ls 0.2.4.27__py3-none-any.whl → 0.2.4.29__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
py2ls/.git/index CHANGED
Binary file
py2ls/ips.py CHANGED
@@ -3657,35 +3657,21 @@ def get_os(full=False, verbose=False):
3657
3657
  pnrint(e)
3658
3658
  return res
3659
3659
 
3660
-
3660
+ import re
3661
+ import stat
3662
+ import platform
3661
3663
  def listdir(
3662
3664
  rootdir,
3663
3665
  kind=None,
3664
3666
  sort_by="name",
3665
3667
  ascending=True,
3666
- contains=None,
3668
+ contains=None,# filter filenames using re
3669
+ booster=False,# walk in subfolders
3670
+ hidden=False, # Include hidden files/folders
3667
3671
  orient="list",
3668
- output="df", # 'list','dict','records','index','series'
3672
+ output="df", # "df", 'list','dict','records','index','series'
3669
3673
  verbose=True,
3670
- ):
3671
- if kind is None:
3672
- ls = os.listdir(rootdir)
3673
- ls = [f for f in ls if not f.startswith(".") and not f.startswith("~")]
3674
- if verbose:
3675
- if len(ls)>20:
3676
- print(ls[:20])
3677
- else:
3678
- print(ls)
3679
- df_all = pd.DataFrame(
3680
- {
3681
- "name": ls,
3682
- "path": [os.path.join(rootdir, i) for i in ls],
3683
- "kind":[os.path.splitext(i)[1] for i in ls]
3684
- }
3685
- )
3686
- if verbose:
3687
- display(df_all.head())
3688
- return df_all
3674
+ ):
3689
3675
  if isinstance(kind, list):
3690
3676
  f_ = []
3691
3677
  for kind_ in kind:
@@ -3695,56 +3681,106 @@ def listdir(
3695
3681
  sort_by=sort_by,
3696
3682
  ascending=ascending,
3697
3683
  contains=contains,
3684
+ booster=booster,# walk in subfolders
3685
+ hidden=hidden,
3698
3686
  orient=orient,
3699
3687
  output=output,
3688
+ verbose=verbose,
3700
3689
  )
3701
3690
  f_.append(f_tmp)
3702
3691
  if f_:
3703
3692
  return pd.concat(f_, ignore_index=True)
3704
-
3705
- if not kind.startswith("."):
3706
- kind = "." + kind
3707
-
3708
- if os.path.isdir(rootdir):
3709
- ls = os.listdir(rootdir)
3710
- ls = [f for f in ls if not f.startswith(".") and not f.startswith("~")]
3711
- fd = [".fd", ".fld", ".fol", ".fd", ".folder"]
3712
- i = 0
3713
- f = {
3714
- "name": [],
3715
- "length": [],
3716
- "path": [],
3717
- "created_time": [],
3718
- "modified_time": [],
3719
- "last_open_time": [],
3720
- "size": [],
3721
- "fname": [],
3722
- "fpath": [],
3723
- "basename":[],
3724
- }
3725
- for item in ls:
3726
- item_path = os.path.join(rootdir, item)
3727
- if item.startswith("."):
3693
+ if kind is not None:
3694
+ if not kind.startswith("."):
3695
+ kind = "." + kind
3696
+ fd = [".fd", ".fld", ".fol", ".fd", ".folder"]
3697
+ i = 0
3698
+ f = {
3699
+ "name": [],
3700
+ 'kind':[],
3701
+ "length": [],
3702
+ "basename":[],
3703
+ "path": [],
3704
+ "created_time": [],
3705
+ "modified_time": [],
3706
+ "last_open_time": [],
3707
+ "size": [],
3708
+ "permission":[],
3709
+ "owner":[],
3710
+ "rootdir":[],
3711
+ "fname": [],
3712
+ "fpath": [],
3713
+ }
3714
+ for dirpath, dirnames, ls in os.walk(rootdir):
3715
+ if not hidden:
3716
+ dirnames[:] = [d for d in dirnames if not d.startswith(".")]
3717
+ ls = [i for i in ls if not i.startswith(".")]
3718
+ for dirname in dirnames:
3719
+ if contains and not re.search(contains, dirname):
3728
3720
  continue
3729
- filename, file_extension = os.path.splitext(item)
3730
- is_folder = kind.lower() in fd and os.path.isdir(item_path)
3731
- is_file = kind.lower() in file_extension.lower() and (
3732
- os.path.isfile(item_path)
3733
- )
3734
- if kind in [".doc", ".img", ".zip"]: # 选择大的类别
3735
- if kind != ".folder" and not isa(item_path, kind):
3736
- continue
3737
- elif kind in [".all"]:
3738
- return flist(fpath, contains=contains)
3739
- else: # 精确到文件的后缀
3740
- if not is_folder and not is_file:
3741
- continue
3721
+ dirname_path = os.path.join(dirpath, dirname)
3722
+ fpath = os.path.join(os.path.dirname(dirname_path), dirname)
3723
+ try:
3724
+ stats_file = os.stat(fpath)
3725
+ except Exception as e:
3726
+ print(e)
3727
+ continue
3728
+ filename, file_extension = os.path.splitext(dirname)
3729
+ file_extension = file_extension if file_extension!='' else None
3742
3730
  f["name"].append(filename)
3731
+ f['kind'].append(file_extension)
3743
3732
  f["length"].append(len(filename))
3744
- f["path"].append(os.path.join(os.path.dirname(item_path), item))
3733
+ f["size"].append(round(os.path.getsize(fpath) / 1024 / 1024, 3))
3734
+ f['basename'].append(os.path.basename(dirname_path))
3735
+ f["path"].append(os.path.join(os.path.dirname(dirname_path), dirname))
3736
+ f["created_time"].append(
3737
+ pd.to_datetime(os.path.getctime(dirname_path), unit="s")
3738
+ )
3739
+ f["modified_time"].append(
3740
+ pd.to_datetime(os.path.getmtime(dirname_path), unit="s")
3741
+ )
3742
+ f["last_open_time"].append(
3743
+ pd.to_datetime(os.path.getatime(dirname_path), unit="s")
3744
+ )
3745
+ f["permission"].append(stat.filemode(stats_file.st_mode)),
3746
+ f["owner"].append(os.getlogin() if platform.system() != "Windows" else "N/A"),
3747
+ f["rootdir"].append(dirpath)
3748
+ f["fname"].append(filename) # will be removed
3749
+ f["fpath"].append(fpath) # will be removed
3750
+ i += 1
3751
+ for item in ls:
3752
+ if contains and not re.search(contains, item):
3753
+ continue
3754
+ item_path = os.path.join(dirpath, item)
3745
3755
  fpath = os.path.join(os.path.dirname(item_path), item)
3746
- basename=os.path.basename(item_path)
3756
+ try:
3757
+ stats_file = os.stat(fpath)
3758
+ except Exception as e:
3759
+ print(e)
3760
+ continue
3761
+ filename, file_extension = os.path.splitext(item)
3762
+ if kind is not None:
3763
+ if not kind.startswith("."):
3764
+ kind = "." + kind
3765
+ is_folder = kind.lower() in fd and os.path.isdir(item_path)
3766
+ is_file = kind.lower() in file_extension.lower() and (
3767
+ os.path.isfile(item_path)
3768
+ )
3769
+ if kind in [".doc", ".img", ".zip"]: # 选择大的类别
3770
+ if kind != ".folder" and not isa(item_path, kind):
3771
+ continue
3772
+ elif kind in [".all"]:
3773
+ return flist(fpath, contains=contains)
3774
+ else: # 精确到文件的后缀
3775
+ if not is_folder and not is_file:
3776
+ continue
3777
+ file_extension = file_extension if file_extension!='' else None
3778
+ f["name"].append(filename)
3779
+ f['kind'].append(file_extension)
3780
+ f["length"].append(len(filename))
3747
3781
  f["size"].append(round(os.path.getsize(fpath) / 1024 / 1024, 3))
3782
+ f['basename'].append(os.path.basename(item_path))
3783
+ f["path"].append(os.path.join(os.path.dirname(item_path), item))
3748
3784
  f["created_time"].append(
3749
3785
  pd.to_datetime(os.path.getctime(item_path), unit="s")
3750
3786
  )
@@ -3754,26 +3790,22 @@ def listdir(
3754
3790
  f["last_open_time"].append(
3755
3791
  pd.to_datetime(os.path.getatime(item_path), unit="s")
3756
3792
  )
3793
+ f["permission"].append(stat.filemode(stats_file.st_mode)),
3794
+ f["owner"].append(os.getlogin() if platform.system() != "Windows" else "N/A"),
3757
3795
  f["fname"].append(filename) # will be removed
3758
3796
  f["fpath"].append(fpath) # will be removed
3759
- f['basename'].append(basename)
3797
+ f["rootdir"].append(dirpath)
3760
3798
  i += 1
3761
3799
 
3762
3800
  f["num"] = i
3763
- f["rootdir"] = rootdir
3764
3801
  f["os"] = get_os() # os.uname().machine
3765
- else:
3766
- raise FileNotFoundError(
3767
- 'The directory "{}" does NOT exist. Please check the directory "rootdir".'.format(
3768
- rootdir
3769
- )
3770
- )
3771
-
3802
+ if not booster: # go deeper subfolders
3803
+ break
3804
+ #* convert to pd.DataFrame
3772
3805
  f = pd.DataFrame(f)
3773
-
3774
- if contains is not None:
3775
- f = f[f["name"].str.contains(contains, case=False)]
3776
-
3806
+ f=f[["basename","name","kind","length","size","num","path","created_time",
3807
+ "modified_time","last_open_time","rootdir",
3808
+ "fname","fpath","permission","owner","os",]]
3777
3809
  if "nam" in sort_by.lower():
3778
3810
  f = sort_kind(f, by="name", ascending=ascending)
3779
3811
  elif "crea" in sort_by.lower():
@@ -3786,10 +3818,10 @@ def listdir(
3786
3818
  if "df" in output:
3787
3819
  if verbose:
3788
3820
  display(f.head())
3821
+ print(f"shape: {f.shape}")
3789
3822
  return f
3790
3823
  else:
3791
3824
  from box import Box
3792
-
3793
3825
  if "l" in orient.lower(): # list # default
3794
3826
  res_output = Box(f.to_dict(orient="list"))
3795
3827
  return res_output
@@ -3802,12 +3834,6 @@ def listdir(
3802
3834
  if "se" in orient.lower(): # records
3803
3835
  return Box(f.to_dict(orient="series"))
3804
3836
 
3805
-
3806
- # Example usage:
3807
- # result = listdir('your_root_directory')
3808
- # print(result)
3809
- # df=listdir("/", contains='sss',sort_by='name',ascending=False)
3810
- # print(df.fname.to_list(),"\n",df.fpath.to_list())
3811
3837
  def listfunc(lib_name, opt="call"):
3812
3838
  if opt == "call":
3813
3839
  funcs = [func for func in dir(lib_name) if callable(getattr(lib_name, func))]
@@ -3822,6 +3848,10 @@ def func_list(lib_name, opt="call"):
3822
3848
  def copy(src, dst, overwrite=False):
3823
3849
  """Copy a file from src to dst."""
3824
3850
  try:
3851
+ dir_par_dst = os.path.dirname(dst)
3852
+ if not os.path.isdir(dir_par_dst):
3853
+ mkdir(dir_par_dst)
3854
+ print(dir_par_dst)
3825
3855
  src = Path(src)
3826
3856
  dst = Path(dst)
3827
3857
  if not src.is_dir():
@@ -3848,11 +3878,14 @@ def copy(src, dst, overwrite=False):
3848
3878
  except Exception as e:
3849
3879
  logging.error(f"Failed {e}")
3850
3880
 
3851
- def move(src, dst, overwrite=False):
3852
- return cut(src=src, dst=dst, overwrite=overwrite)
3853
-
3854
3881
  def cut(src, dst, overwrite=False):
3882
+ return move(src=src, dst=dst, overwrite=overwrite)
3883
+
3884
+ def move(src, dst, overwrite=False):
3855
3885
  try:
3886
+ dir_par_dst = os.path.dirname(dst)
3887
+ if not os.path.isdir(dir_par_dst):
3888
+ mkdir(dir_par_dst)
3856
3889
  src = Path(src)
3857
3890
  dst = Path(dst)
3858
3891
  if dst.is_dir():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: py2ls
3
- Version: 0.2.4.27
3
+ Version: 0.2.4.29
4
4
  Summary: py(thon)2(too)ls
5
5
  Author: Jianfeng
6
6
  Author-email: Jianfeng.Liu0413@gmail.com
@@ -25,11 +25,11 @@ Requires-Dist: MarkupSafe (>=2.1.5)
25
25
  Requires-Dist: PyMatting (>=1.1.12)
26
26
  Requires-Dist: PyOpenGL (>=3.1.6)
27
27
  Requires-Dist: PyPDF2 (>=3.0.1)
28
- Requires-Dist: PyQt5 (>=5.15.11)
29
- Requires-Dist: PyQt5-Qt5 (>=5.15.14)
28
+ Requires-Dist: PyQt5 (>=5.15.0)
29
+ Requires-Dist: PyQt5-Qt5 (>=5.15.0)
30
30
  Requires-Dist: PyQt5_sip (>=12.15.0)
31
- Requires-Dist: PyQtWebEngine (>=5.15.7)
32
- Requires-Dist: PyQtWebEngine-Qt5 (>=5.15.14)
31
+ Requires-Dist: PyQtWebEngine (>=5.15.0)
32
+ Requires-Dist: PyQtWebEngine-Qt5 (>=5.15.0)
33
33
  Requires-Dist: PySocks (>=1.7.1)
34
34
  Requires-Dist: PyYAML (>=6.0.1)
35
35
  Requires-Dist: Pygments (>=2.18.0)
@@ -38,7 +38,6 @@ Requires-Dist: SciencePlots (>=2.1.1)
38
38
  Requires-Dist: XlsxWriter (>=3.2.0)
39
39
  Requires-Dist: asciitree (>=0.3.3)
40
40
  Requires-Dist: asttokens (>=2.4.1)
41
- Requires-Dist: attrs (>=23.2.0)
42
41
  Requires-Dist: autogluon (>=1.2)
43
42
  Requires-Dist: beautifulsoup4 (>=4.12.3)
44
43
  Requires-Dist: bleach (>=6.1.0)
@@ -18,7 +18,7 @@ py2ls/.git/hooks/pre-receive.sample,sha256=pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlI
18
18
  py2ls/.git/hooks/prepare-commit-msg.sample,sha256=6d3KpBif3dJe2X_Ix4nsp7bKFjkLI5KuMnbwyOGqRhk,1492
19
19
  py2ls/.git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
20
20
  py2ls/.git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
21
- py2ls/.git/index,sha256=X6N4wzd4ONwHaOyemlvaqQkoXIroIn7A7Q7RgUgXpaI,4232
21
+ py2ls/.git/index,sha256=1-0l4HpWQFAVRMijggz6CNt4WGBxyGaAzgKzr57Td2I,4232
22
22
  py2ls/.git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
23
23
  py2ls/.git/logs/HEAD,sha256=8ID7WuAe_TlO9g-ARxhIJYdgdL3u3m7-1qrOanaIUlA,3535
24
24
  py2ls/.git/logs/refs/heads/main,sha256=8ID7WuAe_TlO9g-ARxhIJYdgdL3u3m7-1qrOanaIUlA,3535
@@ -240,7 +240,7 @@ py2ls/export_requirements.py,sha256=x2WgUF0jYKz9GfA1MVKN-MdsM-oQ8yUeC6Ua8oCymio,
240
240
  py2ls/fetch_update.py,sha256=9LXj661GpCEFII2wx_99aINYctDiHni6DOruDs_fdt8,4752
241
241
  py2ls/freqanalysis.py,sha256=F4218VSPbgL5tnngh6xNCYuNnfR-F_QjECUUxrPYZss,32594
242
242
  py2ls/ich2ls.py,sha256=3E9R8oVpyYZXH5PiIQgT3CN5NxLe4Dwtm2LwaeacE6I,21381
243
- py2ls/ips.py,sha256=255SRYfnZXRDQ2NTyMV3V7fqsQRKyF1qJXfmqC1Il9Q,340739
243
+ py2ls/ips.py,sha256=ZAwkOilTrfQ3zkUiMQbidrcFs-hZoWmXH60KGHkh530,342899
244
244
  py2ls/ml2ls.py,sha256=kIk-ZnDdJGd-fw9GPIFf1r4jtrw5hgvBpRnYNoL1U8I,209494
245
245
  py2ls/mol.py,sha256=AZnHzarIk_MjueKdChqn1V6e4tUle3X1NnHSFA6n3Nw,10645
246
246
  py2ls/netfinder.py,sha256=UfsruqlFwUOZQx4mO7P7-UiRJqcxcT0WN3QRLv22o74,64059
@@ -252,6 +252,6 @@ py2ls/sleep_events_detectors.py,sha256=bQA3HJqv5qnYKJJEIhCyhlDtkXQfIzqksnD0YRXso
252
252
  py2ls/stats.py,sha256=qBn2rJmNa_QLLUqjwYqXUlGzqmW94sgA1bxJU2FC3r0,39175
253
253
  py2ls/translator.py,sha256=77Tp_GjmiiwFbEIJD_q3VYpQ43XL9ZeJo6Mhl44mvh8,34284
254
254
  py2ls/wb_detector.py,sha256=7y6TmBUj9exCZeIgBAJ_9hwuhkDh1x_-yg4dvNY1_GQ,6284
255
- py2ls-0.2.4.27.dist-info/METADATA,sha256=HWrS9YqO12ydb_7jNR9CtR_a-HCyGqE9nmSX2xvnPdk,20248
256
- py2ls-0.2.4.27.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
257
- py2ls-0.2.4.27.dist-info/RECORD,,
255
+ py2ls-0.2.4.29.dist-info/METADATA,sha256=Q5QexUBj0yRURCC-AdmLXGJBvO3ZO_uc0UW_EdmU_qo,20213
256
+ py2ls-0.2.4.29.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
257
+ py2ls-0.2.4.29.dist-info/RECORD,,