Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
chkFile with absolute paths
#1
Hey everyone,

Here is a function I made to check if files exist.
def chkFile(filesPath):
	if hasattr(filesPath, "__len__"):
		for i in filesPath:
			if not path.exists(i):
				return False
		return True
	else:
		return path.exists(filesPath)
it works great for files in the main directories, and subdirectories. However I am trying to get it to recognize a file located in /sys/bus/w1/devices/, which is nowhere near my working dir. anyone know how I can change this to accept absolute dir's?

Thanks
Reply
#2
What kind of object are you passing into the function?

os.path.exists() should have no problems with files outside your current directory.

>>> import os
>>> os.path.exists("/var/tmp")
True
>>> os.path.exists("/etc/fstab")
True
Reply
#3
Quote:What kind of object are you passing into the function?

a string with the directory I mentioned above

could the os be blocking it? does linux make some Dir's off limits to Python?
Reply
#4
I don't understand how that function would work even locally for files of more than 1 character.

If you pass in a string like "local", then it loops over each of the characters. It will check if the path "l" exists, and return False if it doesn't.

What's the purpose of checking if it has a __len__ attribute and then looping over the elements if it does?
Reply
#5
You can also add in a list of paths, and it will return False if one is. It good, or True if they are all valid.

Compares the runs the __len__ attribute into the hasattr function to see if its a list or a string
Reply
#6
But that's not a valid distinction. Both strings and lists have __len__.

>>> hasattr(list, "__len__")
True
>>> hasattr(str, "__len__")
True
So a list will work, but a string won't.

from os import path

def chkFile(filesPath):
    if hasattr(filesPath, "__len__"):
        for i in filesPath:
            if not path.exists(i):
                return False
        return True
    else:
        return path.exists(filesPath)

print(chkFile(['/etc/fstab', '/tmp']))
print(chkFile('/etc/fstab'))
Output:
True False
Reply
#7
do you have a better suggestion?

I tried it when I made it and it worked, but I will check again to make sure it wasn't a fluke. Python is new to me, and the other languages I have used didn't differentiate between list, truples, and dictionaries.
Reply
#8
Most functions just assume that particular type will be sent in (it's always a list-like object or it's always a string).

You can ask the object if it's an instance of a string and otherwise assume you could iterate through it.

def show_strings(obj):
    if isinstance(obj, str):
        print(f"got the single string {obj}")
    else:
        for s in obj:
            print(f"One string in the collection is {s}")


show_strings("onestring")
print()
show_strings(("string1", "string2", "string3"))
Output:
got the single string onestring One string in the collection is string1 One string in the collection is string2 One string in the collection is string3
I don't see any reason that it should work on local files and fail on files in /sys. Does it work for something like "/etc/passwd"? I don't have the file that you're concerned about on my system, so I don't know if it's special in some way.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Absolute paths in subprocess - file not found kittyticker 4 397 Jan-28-2024, 10:37 PM
Last Post: kittyticker
  pdf2image, poppler and paths jehoshua 18 13,937 Jun-14-2022, 06:38 AM
Last Post: jehoshua
  Windows paths issue otalado 3 1,416 May-29-2022, 09:11 AM
Last Post: snippsat
  automatically get absolute paths oclmedyb 1 2,061 Mar-11-2021, 04:31 PM
Last Post: deanhystad
  Absolute beginner am I missing something? kamren 7 3,105 Sep-25-2020, 05:32 AM
Last Post: buran
  absolute imports between folders mikisDW 0 1,500 Aug-05-2020, 12:26 PM
Last Post: mikisDW
  Paths millpond 12 5,080 Jul-30-2020, 01:16 PM
Last Post: snippsat
  Problems with windows paths delphinis 6 5,045 Jul-21-2020, 06:11 PM
Last Post: Gribouillis
  I am an absolute newbie.Help me! feynarun 4 2,439 Apr-11-2020, 09:25 PM
Last Post: feynarun
  Shortest paths to win snake and ladder sandaab 5 4,178 Jun-30-2019, 03:20 PM
Last Post: sandaab

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020