#!/usr/bin/python3 # -*- coding: utf-8 -*- """ Standard library and file-handling This one is more clear when run in spyder. """ import os print(dir(os)) help(os) print(os.listdir(".")) print(os.getcwd()) print(os.listdir(os.curdir)) os.system("mkdir today") os.system("rmdir today") os.mkdir("junkdir") os.chdir("junkdir") os.chdir("..") os.rename("junkdir", "foodir") print("junkdir" in os.listdir(os.curdir)) print("foodir" in os.listdir(os.curdir)) os.rmdir("foodir") print("foodir" in os.listdir(os.curdir)) # quick preview on reading/writing files (more later) fp = open("junk.txt", "w") fp.close() print("junk.txt" in os.listdir(os.curdir)) print(os.stat("junk.txt")) os.rename("junk.txt", "otherjunk.txt") print("junk.txt" in os.listdir(os.curdir)) fp = open("junk.txt", "w") fp.close() a = os.path.abspath("junk.txt") print(a) print(os.path.split(a)) print(os.path.dirname(a)) print(os.path.basename(a)) print(os.path.splitext(os.path.basename(a))) print(os.path.exists("junk.txt")) print(os.path.isfile("junk.txt")) print(os.path.isdir("junk.txt")) print(os.path.expanduser("~/.local")) print(os.path.join(os.path.expanduser("~"), ".local", "bin")) # List all files in a directory using os.listdir basepath = "." for entry in os.listdir(basepath): if os.path.isfile(os.path.join(basepath, entry)): print("File: ", entry) else: print("Notafile: ", entry) # List all files in a directory using scandir() basepath = "." with os.scandir(basepath) as entries: for entry in entries: if entry.is_file(): print("File: ", entry.name) else: print("Notafile: ", entry.name) folders = [] files = [] for entry in os.scandir("."): if entry.is_dir(): folders.append(entry.path) elif entry.is_file(): files.append(entry.path) print("Folders:", folders) print("Files:", files) # walk a directocy, kind of like `tree` for dirpath, dirnames, filenames in os.walk(os.curdir): print() print(dirpath) print(dirnames) print(filenames) for root, dirs, files in os.walk("."): for file_ in files: print(os.path.join(root, file_)) """ The shutil module provides useful file operations: shutil.rmtree: Recursively delete a directory tree. shutil.move: Recursively move a file or directory to another location. shutil.copy: Copy files or directories. """ import shutil shutil.copyfile("junk.txt", "somefile") os.remove("somefile") os.mkdir("build-executables") shutil.move("build-executables", "somedir") shutil.rmtree("somedir") shutil.copytree("folder", "folder_copy") shutil.rmtree("folder_copy") # Glob provides a very helpful search: import glob print(glob.glob("*.py")) print(glob.glob("*.txt")) # for example, recursively through all sub-dirs: filenames = glob.glob("**/*.py", recursive=True) print(filenames) # ++++++++++++ Cahoot-18c.1 # https://mst.instructure.com/courses/58101/quizzes/57007 import sys print(sys.platform) print(sys.version) print(sys.prefix) # You may recognize this from the top of your HW: try: assert "linux" in sys.platform, "Follow instructions!!" except Exception as e: print(type(e), e) # sys.whatever can be overwritten, or manipulated, temporarily sys.platform = "windows" try: assert "linux" in sys.platform, "Follow instructions!" except Exception as e: print(type(e), e) # When you close and open python interpreter, this will be reset # %% Running system commands # Can be done this way, though it's not preferred: print(os.system("ls")) print(os.system("ls -l")) out = os.system("ls -a") # The value returned is the return code, not the printed output print(out) # subprocess.whatever is better than os.system import subprocess returnobject = subprocess.run(["ls", "-l"], capture_output=True) print(returnobject.stdout.decode()) print(returnobject.args) print(returnobject.returncode) print(returnobject.stderr) # ++++++++++++ Cahoot-18c.2 # https://mst.instructure.com/courses/58101/quizzes/57008