549 lines
8.8 KiB
ReStructuredText
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
|