easymacro/docs/source/paths.rst

549 lines
8.8 KiB
ReStructuredText

Paths and files
===============
Remember, always import library first.
.. code-block:: python
import easymacro as app
Get info path
-------------
.. code-block:: python
path = '/home/mau/myfile.ods'
p = app.path(path)
app.debug(p.path)
app.debug(p.file_name)
app.debug(p.name)
app.debug(p.ext)
app.debug(p.size)
app.debug(p.url)
.. image:: _static/images/path_01.png
|
Get info like tuple
.. code-block:: python
app.debug(p.info)
.. image:: _static/images/path_02.png
|
Or like dict
.. code-block:: python
app.debug(p.dict)
.. image:: _static/images/path_03.png
Get home path
-------------
.. code-block:: python
p = app.path
app.debug(p.home)
Get document path
------------------
.. code-block:: python
p = app.path
app.debug(p.documents)
Get path user profile
---------------------
.. code-block:: python
p = app.path
app.debug(p.user_profile)
Get path user config
--------------------
.. code-block:: python
p = app.path
app.debug(p.user_config)
Get python executable path
--------------------------
.. code-block:: python
p = app.path
app.debug(p.python)
Path URL to system
------------------
.. code-block:: python
path = 'file:///home/mau/myfile.ods'
app.debug(app.path.to_system(path))
Path system to URL
------------------
.. code-block:: python
path = 'file:///home/mau/myfile.ods'
path = app.path.to_system(path)
app.debug(app.path.to_url(path))
Get path from user config
-------------------------
Default get path documents. `See Api XPathSettings <http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1util_1_1XPathSettings.html>`_
.. code-block:: python
path = app.path.config()
app.debug(path)
path = app.path.config('UserConfig')
app.debug(path)
.. note::
Some paths can be more than one path separated by a semicolon, in this case, you get a `list` of paths.
Path join
---------
.. code-block:: python
path = app.path.join('/home/mau', 'test', 'file.ods')
app.debug(path)
Exists path
-----------
.. code-block:: python
exists = app.path.exists('/home/mau/test/file.ods')
app.debug(exists)
Verify if application exists
----------------------------
.. code-block:: python
app_name = 'nosoffice'
app.debug(app.path.exists_app(app_name))
app_name = 'soffice'
app.debug(app.path.exists_app(app_name))
Path is file
------------
.. code-block:: python
path = '/home/mau/myfile.ott'
app.msgbox(app.path.is_file(path))
Path is dir
-----------
.. code-block:: python
path = '/home/mau'
app.msgbox(app.path.is_dir(path))
Make temporary file
-------------------
It will be destroyed as soon as it is closed.
.. code-block:: python
f = app.path.temp_file()
f.write(app.NAME)
f.close()
If used in context, It will be destroyed too.
.. code-block:: python
with app.path.temp_file() as f:
app.debug(f.name)
f.write('test')
Make temporary directory
------------------------
On completion of the context or destruction of the temporary directory object, the newly created temporary directory and all its contents are removed from the filesystem.
.. code-block:: python
with app.path.temp_dir() as d:
app.debug(app.path.exists(d))
app.debug(d)
Get path for save
-----------------
Default open in user documents
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = app.path.get()
app.msgbox(path)
Open in other path
^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_tmp = app.path.config('Temp')
path = app.path.get(path_tmp)
app.msgbox(path)
Add one filter
^^^^^^^^^^^^^^
.. code-block:: python
path = app.path.get(filters='xml')
app.msgbox(path)
Add multiple filters
^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = app.path.get(filters='xml,txt')
Select directory
----------------
Default open in user documents
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = app.path.get_dir()
app.debug(path)
Open in other path
^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_tmp = app.path.config('Temp')
path_dir = app.paths.get_dir(path_tmp)
app.debug(path_dir)
Get path exists file
--------------------
Default open in user documents
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_file = app.path.get_file()
app.msgbox(path_file)
Change init dir
^^^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau'
path_file = app.path.get_file(path)
app.msgbox(path_file)
Add filter or filters
^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_file = app.path.get_file(filters='ods')
# or
path_file = app.path.get_file(filters='ods,odt')
Can select multiple files
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path_files = app.path.get_file(multiple=True)
Get files
---------
Get files not recursively
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/Documents'
files = app.path.files(path)
for f in files:
app.debug(f)
Add filter
^^^^^^^^^^
.. code-block:: python
files = app.path.files(path, '*.pdf')
Get content files, recursively
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
files = app.path.files(path, '**/*.pdf')
Get content files recursively
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This method use `os.walk`
.. code-block:: python
path = '/home/mau/Documents'
files = app.path.walk(path)
for f in files:
app.debug(f)
Add filter
^^^^^^^^^^
.. code-block:: python
files = app.path.walk(path, 'ods')
# or filters
files = app.path.walk(path, 'ods|odt')
Get directories
---------------
Get directories not recursively
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This method use library `pathlib`
.. code-block:: python
path = '/home/mau/Documents'
folders = app.path.dirs(path)
for f in folders:
app.debug(f)
Get directories recursively
^^^^^^^^^^^^^^^^^^^^^^^^^^^
This method use `os.walk`
.. code-block:: python
path = '/home/mau/Documents'
folders = app.path.walk_dirs(path)
for f in folders:
app.debug(f)
Get info in a tuple
^^^^^^^^^^^^^^^^^^^
Like (ID_FOLDER, ID_PARENT, NAME)
.. code-block:: python
path = '/home/mau/Documents'
folders = app.path.walk_dirs(path, True)
for f in folders:
app.debug(f)
Get install path extension from id
----------------------------------
.. code-block:: python
id_ext = 'net.elmau.zaz.EasyMacro'
path = app.path.extension(id_ext)
app.debug(path)
.. code-block:: bash
24/06/2021 21:47:29 - DEBUG - /home/mau/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu20665x29msz.tmp_/ZAZEasyMacro_v0.1.0.oxt
Replace extension
-----------------
.. code-block:: python
path = '/home/mau/myFile.ods'
path_new = app.path.replace_ext(path, 'pdf')
app.debug(path_new)
Open any type file
------------------
Open with default application in OS.
.. code-block:: python
path = '/home/mau/file.pdf'
app.path.open(path)
path = '/home/mau/index.html'
app.path.open(path)
Save and read text data
-----------------------
Default encoding is UTF8
.. code-block:: python
data = """Do you want to know who you are? Don't ask. Act!
Action will delineate and define you.
Thomas Jefferson
"""
path = '/home/mau/temp.txt'
app.path.save(path, data)
data = app.path.read(path)
app.msgbox(data)
Change encoding
.. code-block:: python
app.path.save(path, data, 'iso-8859-1')
Save and read binary data
-------------------------
.. code-block:: python
data = b'Binary data'
path = '/home/mau/temp.bin'
app.path.save_bin(path, data)
data = app.path.read_bin(path)
app.msgbox(data)
Save and read json
------------------
.. code-block:: python
path = '/home/mau/data.json'
data = {
'type': 'calc',
'name': 'myfile.ods',
}
app.path.to_json(path, data)
data = app.path.from_json(path)
app.msgbox(data)
Save and read csv
-----------------
You can used the same way that `python csv`_
.. code-block:: python
path = '/home/mau/data.csv'
data = (
(1, 'one', app.now()),
(2, 'two', app.now()),
(3, 'three', app.now()),
)
app.path.to_csv(path, data)
data = app.path.from_csv(path)
app.msgbox(data)
Delete files and directories
----------------------------
**CAUTION**: This method delete files and directories without confirmation, always ask to user first.
.. code-block:: python
path = '/home/mau/temp.bin'
result = app.path.kill(path)
app.msgbox(result)
Delete directory and all content
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
path = '/home/mau/safe_for_delete'
result = app.path.kill(path)
app.msgbox(result)
.. _python csv: https://docs.python.org/3.7/library/csv.html