'Python: Recursivly get the length of file path

Trying to recursively scan a given directory and get the length of the file or directory path not the file or directory size

If the length is more than say 35 characters, Just to test, output the path and length to a log file

If Directory Path is > 35 then little point traversing down further

import sys
import os


path = sys.argv[1]
Log = path + "\\PathToLongLog.txt"
fname = []

# Check if path exits
if os.path.exists(path):
    print ("Directory exist")
    for root,d_names,f_names in os.walk(path):
        print (root, d_names, f_names)
        for f in f_names:
          fname.append(os.path.join(root, f))

#print("fname = %s" %fname)
    
for fp in fname:
  Len = len(fp)  
  if Len > 35:
    print("fname = %s" %fname, " Lenth ", str(Len) )
    msg ="fname = " + str(fname) + " Lenth " + str(Len)
    with open(Log, "a") as LogFile:
      LogFile.write(msg + "\n")   

Expected output would be 1 line for each file

D:\Path\To\Very Long File\Or Directory\My File.txt  Length 50   

What I'm getting is

fname = ['D:\\Path\\To\\Very Long File\\Or Directory\\My File.txt', 'Path\\To\\File1.ext', 'Path\\To\\File2.ext',etc] length 50

Can anyone see what I'm doing wrong?



Solution 1:[1]

You want to log the file name but you are actually logging the fname variable which is a list of all files.

You can change the code to log the 'fp' variable instead of the 'fname' and it will work:

for fp in fname:
    Len = len(fp)  
    if Len > 35:
        print("fname = %s" %fp, " Lenth ", str(Len))
        msg = "fname = " + str(fp) + " Lenth " + str(Len)
        with open(Log, "a") as LogFile:
            LogFile.write(msg + "\n")

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1