Скрипт Python работает в текущем каталоге, но не тогда, когда он указан

#python #python-3.x

#python #python-3.x

Вопрос:

Когда я пытаюсь просто распечатать содержимое, оно работает и в других местах.

Но когда я хочу, чтобы файлы также отображали их размер, он работает только по текущему пути.

 import os
import sys

#check if a path is provided
#else use the current loction
arg_list = len(sys.argv) -1

if arg_list != 1:
    path = '.' 
elif arg_list == 1:
    path = sys.argv[1]

#list the files and directorys
#if it is a file also show it's size
catalog = os.listdir(path)

for item in catalog:
    #just print() here works also for other directories
    if os.path.isdir(item):
        print(f'    {item}')

    elif os.path.isfile(item):
        size = os.path.getsize(item)
        print(f'{size} {item}')
  

Комментарии:

1. Что происходит с отображением размера файла для других каталогов?

Ответ №1:

Эта инструкция: catalog = os.listdir(path) верните список файлов / папок внутри данного каталога без их полного пути, только имя.

Поэтому, когда вы пытаетесь изменить папку os.path.isdir и os.path.isfile не находите ссылку на этот файл.

Вы должны исправить свой скрипт таким образом:

 import os
import sys

#check if a path is provided
#else use the current loction
arg_list = len(sys.argv) -1

if arg_list != 1:
    path = '.' 
elif arg_list == 1:
    path = sys.argv[1]

#list the files and directorys
#if it is a file also show it's size
catalog = os.listdir(path)

for item in catalog:
    file = os.path.join(path, item) # <== Here you set the correct name with the full path for the file
    #just print() here works also for other directories
    if os.path.isdir(file):  # <== then change the reference here
        print(f'    {item}')

    elif os.path.isfile(file):  # <== here 
        size = os.path.getsize(file)  # <== and finally here
        print(f'{size} {item}')
  

Комментарии:

1. os.path.join() вместо » было бы лучше.