- Write string to file
- Read the whole file contents to a string
- Read a file line-by-line, without loading it all to memory (buffered reading)
- Test if a file exists
- Relative to Absolute Path
- Relative to absolute path in Jupyter notebooks
- Get file name from file path (basename)
- Get path to file without the basename
- Get current working directory
- Get the directory where this (current) file is located
- List files in directory
- Loop over files in directory, recursively
- Delete a file
- Add directory to PATH
WIP Alert This is a work in progress. Current information is correct but more content may be added in the future.
All examples assume Python 3, unless otherwise stated
The full list of methods you can call on a file object can be found here: Python 3: io.IOBASE
Pathlib is used in some examples here; it comes by default with Python 3 but you can also use it in Python 2 via Pip:
pip install pathlib
Write string to file
write is just one method of class
File. See all here
# will be overwritten if it already exists! with open("filename.txt","w") as f: f.write("foo bar")
Read the whole file contents to a string
with open("filename.txt","r") as f: contents = f.read()
Read a file line-by-line, without loading it all to memory (buffered reading)
This is easy with python:
with open("path/to/file") as f: for line in f: # process the line
You can also use
f.readline() to read a whole line (be careful if the file has no line breaks) or
f.read(size), which takes an argument indicating the maximum number of bytes to be read into memory.
Test if a file exists
This method returns
True if the given path exists and it's a file.
If you just want to test if a path exists (be it a file, directory or even link), use
import os.path path_to_file = "/path/to/file" if os.path.isfile(path_to_file): # it exists, and it is a regular # (i.e. not a directory) file
Relative to Absolute Path
os.path.abspath. But remember that the relative path is calculated with respect to your current working directory.
Note that this will not warn you if you supply a path that resolves to a file/dir that doesn't exist
If you want the relative path to be calculated with respect to the current file location, don't forget to prepend
__file__+"/" to the relative path!
import os # path is relative to the current WORKING directory! abs_path = os.path.abspath("../../other-dir") # path is relative to the directory where THIS file # is located! abs_path = os.path.abspath(__file__+"/../../other-dir")
Relative to absolute path in Jupyter notebooks
"NameError: name 'file' is not defined"
"__file__" (in quotes) instead:
import os # on a jupyter notebook abs_path = os.path.abspath("__file__"+"/../../other-dir")
Get file name from file path (basename)
import os print(os.path.basename("/path/to/some/file.txt")) # "file.txt"
Get path to file without the basename
This is the inverse of the above. Note the trailing slash is not included.
import os print(os.path.dirname("/path/to/some/file.txt")) # "/path/to/some"
Get current working directory
The current working directory (or cwd) is the directory the user that first called the script was located.
import os os.getcwd()
Get the directory where this (current) file is located
Note that this is not at all the same thing as the current working directory (seen above)
import os # __file__ points to the where the current file is located os.path.dirname(os.path.realpath(__file__))
List files in directory
import os os.listdir(path_to_directory)
Loop over files in directory, recursively
To loop over all files recursively under some path (i.e. including subdirectories):
import os # you may omit trailing slashes # i.e. '/tmp' works too path = '/tmp/' for root, directories, filenames in os.walk(path): for directory in directories: directory_path = os.path.join(root, directory) # do somthing with directory_path for filename in filenames: file_path = os.path.join(root,filename) # do something with directory_path
Delete a file
Add directory to PATH
Suppose you have a directory structure that looks like this:
myproject/ ├── helpers │ └── mymodule.py ├── utils │ └── myothermodule.py └── stuff └── file1.py
# stuff/file1.py import os import sys # find out the absolute path to the directory # you want to add to your path other_dir = os.path.abspath(__file__+"/../") sys.path.insert(0,other_dir) # now you can import stuff like this from helpers import mymodule from utils import myothermodule