Skip to content

Commit 43bbd68

Browse files
add method get_filenames_in_dir in utils.py, add unittest
1 parent 5244dd7 commit 43bbd68

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

pysenal/utils/utils.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: UTF-8 -*-
2+
import os
23
import copy
34
from collections import Iterable
45

@@ -48,3 +49,49 @@ def list2dict(l, key, pop_key=False):
4849
new_item.pop(key)
4950
d[item[key]] = new_item
5051
return d
52+
53+
54+
def get_filenames_in_dir(dirname,
55+
skip_dir=True,
56+
skip_hidden_file=True,
57+
rm_extname=False,
58+
rm_dirname=False):
59+
"""
60+
get file names in directory, file name in dictionary order
61+
:param dirname: directory path to get file names
62+
:param skip_dir: whether skip directory in results
63+
:param skip_hidden_file: whether skip hidden file in results
64+
:param rm_extname: whether remove suffix extname in results
65+
:param rm_dirname: whether remove prefix dirname in results
66+
:return: scanned file name list, in dictionary order
67+
"""
68+
filenames = []
69+
if not os.path.exists(dirname):
70+
raise FileNotFoundError('directory is not existed.')
71+
72+
for filename in os.listdir(dirname):
73+
is_add = True
74+
if skip_hidden_file and filename.startswith('.') and filename not in {'.', '..'}:
75+
is_add = False
76+
if skip_dir and os.path.isdir(os.path.join(dirname, filename)):
77+
is_add = False
78+
if is_add:
79+
filenames.append(filename)
80+
81+
if not rm_dirname:
82+
filenames = [os.path.join(dirname, name) for name in filenames]
83+
84+
if rm_extname:
85+
new_filenames = []
86+
for filename in filenames:
87+
basename = os.path.basename(filename)
88+
if '.' in basename:
89+
dot_index = basename.rindex('.')
90+
if dot_index:
91+
filename = filename[:filename.rindex('.')]
92+
93+
new_filenames.append(filename)
94+
filenames = new_filenames
95+
96+
filenames = sorted(filenames)
97+
return filenames

tests/utils/test_utils.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# -*- coding: UTF-8 -*-
2+
import shutil
3+
import tempfile
24
from types import GeneratorType
35
import pytest
46
from pysenal.utils.utils import *
@@ -56,3 +58,40 @@ def test_list2dict():
5658
assert list2dict(l2, 'name', pop_key=True) == expected_l2
5759
with pytest.raises(TypeError):
5860
list2dict(1, 'pid')
61+
62+
63+
@pytest.fixture()
64+
def get_filename_dirname():
65+
base_dirname = tempfile.gettempdir() + '/'
66+
dirname = base_dirname + 'pysenal_test_utils_get_filename/'
67+
return dirname
68+
69+
70+
@pytest.fixture()
71+
def get_filename_dir_setup(get_filename_dirname):
72+
dirname = get_filename_dirname
73+
if os.path.exists(dirname):
74+
shutil.rmtree(dirname)
75+
os.mkdir(dirname)
76+
os.mkdir(dirname + 'dir1')
77+
os.mkdir(dirname + 'dir2')
78+
open(dirname + 'file1', 'a').close()
79+
open(dirname + 'file2.bak', 'a').close()
80+
open(dirname + 'file2.bak', 'a').close()
81+
open(dirname + '.file3', 'a').close()
82+
open(dirname + '.file4.txt', 'a').close()
83+
84+
85+
def test_get_filename_in_dir(get_filename_dir_setup, get_filename_dirname):
86+
dirname = get_filename_dirname
87+
expected_ret1 = [dirname + 'file1', dirname + 'file2.bak']
88+
assert get_filenames_in_dir(dirname) == expected_ret1
89+
90+
expected_ret2 = [dirname + 'file1', dirname + 'file2']
91+
assert get_filenames_in_dir(dirname, rm_extname=True) == expected_ret2
92+
93+
assert get_filenames_in_dir(dirname, rm_extname=True, rm_dirname=True) == ['file1', 'file2']
94+
95+
ret3 = get_filenames_in_dir(dirname, rm_extname=True, skip_hidden_file=False)
96+
expected_ret3 = [dirname + '.file3', dirname + '.file4', dirname + 'file1', dirname + 'file2']
97+
assert ret3 == expected_ret3

0 commit comments

Comments
 (0)