====== Python ======
Python's **style guide** can be found [[https://peps.python.org/pep-0008/ | here]] (PEP 8).
**Documentation:** I find the W3School site to be more helpful initially. Then, if I need more detail and definition, I got to the official Python doc site (which, honestly, I find difficult to navigate).
**W3 Schools:**
* [[https://www.w3schools.com/python/python_datatypes.asp | Python]]
* [[https://www.w3schools.com/python/python_user_input.asp | User Input]]
* [[https://www.w3schools.com/python/python_reference.asp | Reference]]
* [[https://www.w3schools.com/python/python_ref_functions.asp | Built-In Functions]]
* [[https://www.w3schools.com/python/python_ref_string.asp | String Methods]]
* [[https://www.w3schools.com/python/python_ref_list.asp | List Methods]] | [[https://www.w3schools.com/python/python_lists_comprehension.asp | List Comprehensions]]
**Python Site:** [[https://www.python.org/ | python.org]]
* [[https://docs.python.org/3.9/library/index.html | Standard Library Index]]
* [[https://docs.python.org/3.9/library/stdtypes.html | Built-In Types]] (& their methods, etc.)
If you do not want to preface all your script names with ''python3'' to run them, your Python scripts should being with (note: your filesystem address may differ):
#!/usr/bin/python3
----
===== Virtual Environment =====
Create a new virtual environment for //**every**// Python project you work on ([[https://www.geeksforgeeks.org/python-virtual-environment/ | read]]).
* This way the dependencies of each project are isolated from the system and from the other projects (avoiding conflicts).
* There are no limits to the number of environments you can have since they are just directories containing a few scripts.
**Installation:** To use virtual environments, install the ''python3-venv'' package.
**Create a Virtual Environment:** Make a new directory, cd into it, create the environment, and activate it.
$ mkdir dir_name_whatever
$ cd dir_name_whatever
$ python3 -m venv name_of_venv
# -m : tells python to run the module as a script
# venv : the module we want to run as a script
# name : name it whatever you want
$ source name_of_venv/bin/activate
# runs the script to activate your virt env
# your prompt should change: prefixed by name of venv
$ deactivate # exit the venv
----
===== Files: Reading From =====
Use the following syntax when opening and reading a file into a Python program:
with open('filename.txt') as file_object:
contents = file_object.read()
print( contents.rstrip() )
* The ''open()'' function returns a file object (an object representing the file).
* The [[https://www.w3schools.com/python/python_ref_keywords.asp | keyword]] ''with'' closes the file once access to it is no longer needed. This structure will avoid problems...
* You could ''open()'' and ''close()'' your file, but if if a bug in your program prevents the ''close()'' statement, the file many never close (possible data loss or corruption).
* The structure above allows Python to automagically close the file when the time is right.
* The ''read()'' method reads then entire file contents and stores it as a string in ''contents''.
* Note: ''read()'' will insert an empty string at EOF which will result in an extra blank line. To remove it, just ''rstrip()''.
**File Paths:** To reference files in other subdirs, you have two options...
- Relative File Path: the path to the file relative to the current working directory.
- Absolute File Path: the path to the file relative to the current file system.
# A relative file path starts in the directory in which you started Python
with open('files/text files/filename.txt') as file_object:
# An absolute file path (b/c they are long, store them in a variable first)
file_path = '/home/greg/other_files/text_files/filename.txt'
with open(file_path) as file_object:
----
===== Web Server =====
Here's an easy quick Python Web Server in your pwd:
python -m SimpleHTTPServer 8080
Pick a port. 8080 is random. Tab completion works for the module name (-m is for "module"). This allows you to transfer files anywhere on the network.
* Put your files in the subdir
* Spin up the Python web server
* Access that server by IP address: port number (192.168.0.101:8080) from any machine
* Download files from the server machine to the client machine
* Documentation: https://docs.python.org/2/library/simplehttpserver.html
----
===== Web Server (Py3) =====
If you use **Python 3**, you should instead write
python3 -m http.server 8080
Python3 http.server documentation: https://docs.python.org/release/3.0.1/library/http.server.html
----
===== FTP One-Liner =====
Note: You may have to ''pip install pyftpdlib''
python -m pyftpdlib
- Ordered List ItemConnect to that machine's IP address with the port number shown.
- Download anything. Navigate around.
----
===== Main Block =====
Runs ''main()'' if file was not imported:
if __name__ == '__main__':
main()
By including this ''if'' statement around your main program (i.e., not your imports, functions, classes, etc.), you can utilize your code in two ways:
- When you run your program from the command line like normal, the program's name becomes ''__main__'' and therefore the main block is executed.
- You can also import this program and its code into another program (as if it were a module or library) and have no side effects.
* Since ''__main__'' will refer to the other program into which you imported your code. Your imported program will act as a Python module and keep is own name (without the extension).
* This means everything else in your imported program (functions, classes, etc.) is available to you, but the main block will //**not**// be executed. Pretty slick