====== 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