from pathlib import Path
current_file = Path("file_io.ipynb").resolve()
print(f"current file: {current_file}")
# Note: in .py files you can get the path of current file by Path(__file__)
current_dir = current_file.parent
print(f"current directory: {current_dir}")
data_dir = current_dir.parent / "data"
print(f"data directory: {data_dir}")
current file: /Users/jerrypussinen/github/jerry-git/learn-python3/notebooks/beginner/notebooks/file_io.ipynb current directory: /Users/jerrypussinen/github/jerry-git/learn-python3/notebooks/beginner/notebooks data directory: /Users/jerrypussinen/github/jerry-git/learn-python3/notebooks/beginner/data
print(f"exists: {data_dir.exists()}")
print(f"is file: {data_dir.is_file()}")
print(f"is directory: {data_dir.is_dir()}")
exists: True is file: False is directory: True
file_path = data_dir / "simple_file.txt"
with open(file_path) as simple_file:
for line in simple_file:
print(line.strip())
First line Second line Third And so the story goes!
The with
statement is for obtaining a context manager that will be used as an execution context for the commands inside the with
. Context managers guarantee that certain operations are done when exiting the context.
In this case, the context manager guarantees that simple_file.close()
is implicitly called when exiting the context. This is a way to make developers life easier: you don't have to remember to explicitly close the file you openened nor be worried about an exception occuring while the file is open. Unclosed file maybe a source of a resource leak. Thus, prefer using with open()
structure always with file I/O.
To have an example, the same as above without the with
.
file_path = data_dir / "simple_file.txt"
# THIS IS NOT THE PREFERRED WAY
simple_file = open(file_path)
for line in simple_file:
print(line.strip())
simple_file.close() # This has to be called explicitly
First line Second line Third And so the story goes!
new_file_path = data_dir / "new_file.txt"
with open(new_file_path, "w") as my_file:
my_file.write("This is my first file that I wrote with Python.")
Now go and check that there is a new_file.txt in the data directory. After that you can delete the file by:
if new_file_path.exists(): # make sure it's there
new_file_path.unlink()