Счетчик использования Python в списке - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу составить список всех моих сохраненных файлов Wi-Fi, с номером перед каждым файлом, но мой вывод не совпадает с тем, что я из моего кода.

import os,
path = '/etc/NetworkManager/system-connections/'
dirs = os.listdir(path)
count = sum([len(files) for r, d, files in os.walk(path)])

for file in dirs:
   for item in range(count):
   print(item, file)

Ожидаемый результат:

1 WiFi-тест

2 androidAP

3 androidAPtest

вывод:

0 wifi-тест

1 androidAP

2 androidAPtest

0 wifi-тест

1 androidAP

2 androidAPtest

и затем начинается снова

Ответы [ 4 ]

0 голосов
/ 01 ноября 2018

Я не уверен, что подсчет должен делать здесь, но если вам нужны файлы в каталоге (не подкаталогах), вам просто нужен os.listdir.

import os
path = '/etc/NetworkManager/system-connections/'
dirs = os.listdir(path)

for i in range(len(dirs)):
    print(i + 1, dirs[i])
0 голосов
/ 01 ноября 2018

Как работает цикл внутри цикла

Я думаю, что у вас есть неправильное понимание того, что происходит, когда вы помещаете цикл внутрь цикла, поэтому позвольте мне сначала объяснить это.

Если у вас есть, например

for item_a in ['a', 'b']:
  for item_b in ['1', '2']:
    print(item_a + item_b)

тогда ваш вывод будет:

a1

a2

b1

b2

Код должен начинаться сначала с цикла a, а затем проходить через оба элемента во внутреннем цикле. После завершения следующим элементом во внешнем цикле будет b, а затем он снова пройдет оба элемента во внутреннем цикле.

Если вы хотите отслеживать, сколько элементов вы перебрали в цикле, вы можете сделать это с помощью этого типа шаблона:

count = 0
for item_a in ['a', 'b']:
  count = count + 1
  print( str(count) + item_a)

В результате

1a

2a

Но есть ярлык. Вы можете использовать изящную функцию с именем enumerate , чтобы получить счетчик каждого элемента в цикле for.

for count, item_a in enumerate(['a', 'b']):
  print( str(count) + item_a)

Что также даст вам

1a

* * 2а тысяча сорок четыре * * 1045

Решение вашей проблемы

С учетом всего вышесказанного вы можете создать свой список файлов примерно так:

# First we loop over os.walk to get the files in the current directory and all sub-directories
for root, dirs, files in os.walk(path):

   # And then using enumerate, we can consolidate those two for loops into one loop that properly counts everything
   for item, file in enumerate(files):
      print(item, os.path.join(root, file))

А если вам не нужны подкаталоги, вы можете просто сделать

for item, file in enumerate(os.listdir(path)):
  print(item, file)
0 голосов
/ 01 ноября 2018

Не совсем понятно, что вы хотите с вашим кодом. Для чего это count?

Может быть, это то, что вы хотите:

import os

path = '/etc/NetworkManager/system-connections/'
dirs = os.listdir(path)

for num, file in enumerate(dirs):
  print(num+1, file)
0 голосов
/ 01 ноября 2018

Это именно то, что будет делать вложенный цикл.

Проверьте выходы контуров независимо:

Там написано, что у вас есть 2 файла в каталоге.

Итак, это первое, на что вы хотите посмотреть. Потому что, если выход должен быть один, он считает другую вещь внутри dirs. Что это значит? Отладьте его, напечатав циклы отдельно.

Кроме того, для следующей проблемы вы можете решить ее путем жесткого кодирования невинного +1

print(item + 1, file)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...