Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to open a .pdf file, knowing only part of it's name

I have pdf files inside a folder, I need to open a file by knowing only it’s number.
The names are like: "TK20141 – Company name", So I need to open the file by only knowing the "20141".

import os
import subprocess

def otsi(x):
    leitud = []
    arr = os.listdir('C:/Users/ASUS/Desktop/Proov')
    for i in range(len(arr)):
        if x in arr[i]:
            leitud.append(arr[i])
    return leitud

otsitav="33333"
print(otsi(otsitav))
subprocess.call(["xdg-open", otsi(otsitav)])

This code gives this error:

['TK33333 - Test.pdf']
Traceback (most recent call last):
  File "c:\Users\ASUS\Desktop\Pooleli olev töö\Märkmed\import os.py", line 14, in <module>
    subprocess.call(["xdg-open", otsi(otsitav)])
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 345, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 966, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 1375, in _execute_child
    args = list2cmdline(args)
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python310\lib\subprocess.py", line 561, in list2cmdline
    for arg in map(os.fsdecode, seq):
  File "C:\Users\ASUS\AppData\Local\Programs\Python\Python310\lib\os.py", line 822, in fsdecode
    filename = fspath(filename)  # Does type-checking of `filename`.
TypeError: expected str, bytes or os.PathLike object, not list

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

You can use glob.glob() to find files using wildcard instead of listing all the files and then go through the file list to find the required files.

Also there is no xdg-open in Windows platform, use os.startfile() instead of subprocess.call().

import glob
import os

def otsi(x):
    return glob.glob(f'C:/Users/ASUS/Desktop/Proov/*{x}*.pdf')

otsitav="33333"
files = otsi(otsitav)
print(files)
if files:
    os.startfile(files[0])
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading