Repository: TheAlgorithms/Python

Issue:
pre-commit on windows fails on Validate filenames
### Repository commit

1faf10b5c2dff8cef3f5d59f60a126bd19bb1c44

### Python version (python --version)

Python 3.11.3

### Dependencies version (pip freeze)

```
absl-py==1.4.0
astunparse==1.6.3
beautifulsoup4==4.12.2
cachetools==5.3.0
certifi==2023.5.7
cffi==1.15.1
cfgv==3.3.1
charset-normalizer==3.1.0
colorama==0.4.6
contourpy==1.0.7
cryptography==40.0.2
cycler==0.11.0
dill==0.3.6
distlib==0.3.6
fake-useragent==1.1.3
filelock==3.12.0
flatbuffers==23.5.9
fonttools==4.39.4
gast==0.4.0
google-auth==2.18.0
google-auth-oauthlib==1.0.0
google-pasta==0.2.0
grpcio==1.54.2
h5py==3.8.0
identify==2.5.24
idna==3.4
iniconfig==2.0.0
jax==0.4.10
joblib==1.2.0
keras==2.12.0
kiwisolver==1.4.4
libclang==16.0.0
lxml==4.9.2
Markdown==3.4.3
markdown-it-py==2.2.0
MarkupSafe==2.1.2
matplotlib==3.7.1
mdurl==0.1.2
ml-dtypes==0.1.0
mpmath==1.3.0
networkx==3.1
nodeenv==1.8.0
ntlm-auth==1.5.0
numpy==1.23.5
oauthlib==3.2.2
opencv-python==4.7.0.72
opt-einsum==3.3.0
packaging==23.1
pandas==2.0.1
patsy==0.5.3
pbr==5.11.1
Pillow==9.5.0
pip==22.3.1
platformdirs==3.5.1
pluggy==1.0.0
ply==3.11
pre-commit==3.3.1
projectq==0.8.0
protobuf==4.23.0
psutil==5.9.5
pyasn1==0.5.0
pyasn1-modules==0.3.0
pycparser==2.21
Pygments==2.15.1
pyparsing==3.0.9
pytest==7.3.1
python-dateutil==2.8.2
pytz==2023.3
PyYAML==6.0
qiskit==0.43.0
qiskit-aer==0.12.0
qiskit-ibmq-provider==0.20.2
qiskit-terra==0.24.0
requests==2.30.0
requests-ntlm==1.1.0
requests-oauthlib==1.3.1
rich==13.3.5
rsa==4.9
ruff==0.0.267
rustworkx==0.12.1
scikit-fuzzy==0.4.2
scikit-learn==1.2.2
scipy==1.10.1
setuptools==65.5.0
six==1.16.0
soupsieve==2.4.1
statsmodels==0.14.0
stevedore==5.0.0
sympy==1.12
tensorboard==2.12.3
tensorboard-data-server==0.7.0
tensorflow==2.12.0
tensorflow-estimator==2.12.0
tensorflow-intel==2.12.0
tensorflow-io-gcs-filesystem==0.31.0
termcolor==2.3.0
texttable==1.6.7
threadpoolctl==3.1.0
tweepy==4.14.0
typing_extensions==4.5.0
tzdata==2023.3
urllib3==1.26.15
virtualenv==20.23.0
websocket-client==1.5.1
websockets==11.0.3
Werkzeug==2.3.4
wheel==0.40.0
wrapt==1.14.1
xgboost==1.7.5
yulewalker==0.1.1
```

### Expected behavior

Run validate filenames when using pre-commit on windows

### Actual behavior

```
Validate filenames.......................................................Failed
- hook id: validate-filenames
- exit code: 9009

Python was not found; run without arguments to install from the Microsoft Store, or disable this shortcut from Settings > Manage App Execution Aliases.
```


Discussion:
I encountered the same issue.

The problem lies in the shebang statement of the file './scripts/validate_filenames.py':

    #!/usr/bin/env python3

On Windows, the 'python3' command is not recognized, but you could theoretically resolve this by changing the shebang in the script to:

    #!/usr/bin/env python

This modification will make it work on your machine.

But to ensure compatibility with other operating systems, you can instead create a symbolic link to the 'python.exe' file on your machine. Follow these steps:

Open the command prompt as admin (cmd).
Navigate to your Python directory.
Create a symbolic link using the following command:

    mklink python3.exe python.exe

For more information, you can refer to this: https://stackoverflow.com/a/55229666/21989223
@CaedenPH Is this still an open issue?

Resolving patch:
diff --git a/scripts/build_directory_md.py b/scripts/build_directory_md.py
--- a/scripts/build_directory_md.py
+++ b/scripts/build_directory_md.py
@@ -6,7 +6,11 @@
 
 def good_file_paths(top_dir: str = ".") -> Iterator[str]:
     for dir_path, dir_names, filenames in os.walk(top_dir):
-        dir_names[:] = [d for d in dir_names if d != "scripts" and d[0] not in "._"]
+        dir_names[:] = [
+            d
+            for d in dir_names
+            if d != "scripts" and d[0] not in "._" and "venv" not in d
+        ]
         for filename in filenames:
             if filename == "__init__.py":
                 continue


Test patch: