|
|
|
|
|
from io import StringIO
|
|
|
|
from .file_client import FileClient
|
|
|
|
|
|
def list_from_file(filename,
|
|
prefix='',
|
|
offset=0,
|
|
max_num=0,
|
|
encoding='utf-8',
|
|
file_client_args=None):
|
|
"""Load a text file and parse the content as a list of strings.
|
|
|
|
Note:
|
|
In v1.3.16 and later, ``list_from_file`` supports loading a text file
|
|
which can be storaged in different backends and parsing the content as
|
|
a list for strings.
|
|
|
|
Args:
|
|
filename (str): Filename.
|
|
prefix (str): The prefix to be inserted to the beginning of each item.
|
|
offset (int): The offset of lines.
|
|
max_num (int): The maximum number of lines to be read,
|
|
zeros and negatives mean no limitation.
|
|
encoding (str): Encoding used to open the file. Default utf-8.
|
|
file_client_args (dict, optional): Arguments to instantiate a
|
|
FileClient. See :class:`mmcv.fileio.FileClient` for details.
|
|
Default: None.
|
|
|
|
Examples:
|
|
>>> list_from_file('/path/of/your/file') # disk
|
|
['hello', 'world']
|
|
>>> list_from_file('s3://path/of/your/file') # ceph or petrel
|
|
['hello', 'world']
|
|
|
|
Returns:
|
|
list[str]: A list of strings.
|
|
"""
|
|
cnt = 0
|
|
item_list = []
|
|
file_client = FileClient.infer_client(file_client_args, filename)
|
|
with StringIO(file_client.get_text(filename, encoding)) as f:
|
|
for _ in range(offset):
|
|
f.readline()
|
|
for line in f:
|
|
if 0 < max_num <= cnt:
|
|
break
|
|
item_list.append(prefix + line.rstrip('\n\r'))
|
|
cnt += 1
|
|
return item_list
|
|
|
|
|
|
def dict_from_file(filename,
|
|
key_type=str,
|
|
encoding='utf-8',
|
|
file_client_args=None):
|
|
"""Load a text file and parse the content as a dict.
|
|
|
|
Each line of the text file will be two or more columns split by
|
|
whitespaces or tabs. The first column will be parsed as dict keys, and
|
|
the following columns will be parsed as dict values.
|
|
|
|
Note:
|
|
In v1.3.16 and later, ``dict_from_file`` supports loading a text file
|
|
which can be storaged in different backends and parsing the content as
|
|
a dict.
|
|
|
|
Args:
|
|
filename(str): Filename.
|
|
key_type(type): Type of the dict keys. str is user by default and
|
|
type conversion will be performed if specified.
|
|
encoding (str): Encoding used to open the file. Default utf-8.
|
|
file_client_args (dict, optional): Arguments to instantiate a
|
|
FileClient. See :class:`mmcv.fileio.FileClient` for details.
|
|
Default: None.
|
|
|
|
Examples:
|
|
>>> dict_from_file('/path/of/your/file') # disk
|
|
{'key1': 'value1', 'key2': 'value2'}
|
|
>>> dict_from_file('s3://path/of/your/file') # ceph or petrel
|
|
{'key1': 'value1', 'key2': 'value2'}
|
|
|
|
Returns:
|
|
dict: The parsed contents.
|
|
"""
|
|
mapping = {}
|
|
file_client = FileClient.infer_client(file_client_args, filename)
|
|
with StringIO(file_client.get_text(filename, encoding)) as f:
|
|
for line in f:
|
|
items = line.rstrip('\n').split()
|
|
assert len(items) >= 2
|
|
key = key_type(items[0])
|
|
val = items[1:] if len(items) > 2 else items[1]
|
|
mapping[key] = val
|
|
return mapping
|
|
|