I am traversing a directory, and if python file is found, trying to find the number of lines of code in it. I am not really sure why I face the below issue.
for dirpath, dirnames, filenames in os.walk(APP_FOLDER):
for file in filenames:
if pathlib.Path(file).suffix == ".py":
num_lines = len(open(file).readlines()) #causes issue
print(
f"Root:{dirpath}\n"
f"file:{file}\n\n"
f"lines: {num_lines}" //
)
Érror:
Traceback (most recent call last):
File "C:\Users\XXXX\PycharmProjects\pythonProject1\main.py", line 11, in <module>
num_lines = len(open(file).readlines())
FileNotFoundError: [Errno 2] No such file or directory:
If i remove that line, the code works as expected. There is a single line code within. Any guidance here?
CodePudding user response:
file
is the file's name, not its path, to get its full path, join the name with the directory path dirpath
using os.path.join
. Also, it is better to use a with
statement when dealing with files since it automatically closes the file:
file_path = os.path.join(dirpath, file)
with open(file_path) as f:
num_lines = len(f.readlines())
CodePudding user response:
You can also try this way. You have to get the os.path.abspath(file)
path of the file then only it'll open.
and always with contect_managers
for IO operation.
for dirpath, dirnames, filenames in os.walk(APP_FOLDER):
for file in filenames:
if pathlib.Path(file).suffix == ".py":
try:
with open(os.path.abspath(file)) as f:
print(len(f.readlines()))
print(os.path.abspath(file))
except:
pass