Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/75: Рейтинг темы: голосов - 75, средняя оценка - 4.87
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
1

Как вывести содержимое директории, используя os.listdir?

24.11.2016, 21:18. Показов 13456. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Друзья! Нахожусь в папке C:\foo, там имеется файл C:\foo, посмотрим его содержание:
Windows Batch file
1
2
3
4
C:\foo>type main.py
import os
for name in os.listdir("C:"):
    print (name)
То есть видно, что он по запуску должен выводить содержимое диска C:, запускаем:

Windows Batch file
1
2
3
C:\foo>python main.py
main.py
perehod_v_tekuch_katalog_v_cmd.bat
Видно, что выводится содержимое ТЕКУЩЕЙ папки, что неправильно. На всякий случай содержимое диска C: оно стандартно:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
C:\foo>dir C:\
 Том в устройстве C не имеет метки.
 Серийный номер тома: 3875-65DF
 
 Содержимое папки C:\
 
05.09.2016  19:49    <DIR>          .idea
24.07.2014  04:22                 0 AUTOEXEC.BAT
09.09.2016  20:20    <DIR>          AVG_Remover
31.08.2016  13:02                30 AVScanner.ini
24.07.2014  04:22                 0 CONFIG.SYS
28.07.2015  16:36    <DIR>          Documents and Settings
24.11.2016  22:58    <DIR>          foo
02.10.2016  19:10                62 hello.py
14.10.2015  00:02    <DIR>          Kaspersky Rescue Disk 10.0
07.09.2016  21:23    <DIR>          lingoes_portable_2.9.2
23.09.2016  17:42            49*760 messagebox_windows.exe
27.01.2016  17:47    <DIR>          My Drivers
15.02.2014  22:20                 5 perehod_v_tekuch_katalog_v_cmd_.bat
30.12.2015  20:29    <DIR>          Perl
23.10.2016  01:37    <DIR>          Program Files
30.07.2015  19:48    <DIR>          Samsung
23.09.2016  18:01    <DIR>          temp
22.11.2016  12:44    <DIR>          WINDOWS
               6 файлов         49*857 байт
              12 папок   2*527*911*936 байт свободно
ЧЯДНТ? Спасибо, кто откликнется. Win Home SP3 32, python 3.1 и 3.3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2016, 21:18
Ответы с готовыми решениями:

Вывести на экран содержимое директории
Простая задача поставила меня в тупик.:wall: Надо в досовское окно вывести содержание папки, Но я...

Как вывести содержимое кавычек, используя регулярные выражения?
Нужно создать сценарий, который из всех принимаемых со стандартного потока строк с помощью...

Как используя библиотеку itext sharp вывести содержимое бд в pdf файл?
В общем, у меня есть проект, связанный с бд. Как используя библиотеку itextsharp можно...

Как просмотреть содержимое директории?
Здравствуйте, подскажите пожалуйста, как в Lazarus просмотреть все файлы, имеющиеся в директории...

[mercurial] Как установит, чтобы содержимое директории не учитывалось в проекте
Здравствуйте. Поискал на форуме темы про меркуриал. Вроде в эту ветку пишут. У меня вопрос, как...

11
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
24.11.2016, 21:54 2
а если поменять на C:/ или C:\\ ничего не меняется?
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
25.11.2016, 15:01  [ТС] 3
Цитата Сообщение от Jabbson Посмотреть сообщение
а если поменять на C:/ или C:\\ ничего не меняется?
оно конечно, помогает "C:", но ещё больше вопросов возникает. Ну, например, почему в таком случае "C:" воспринимается интерпретатором как текущий каталог и как с этим бороться?

++++++++++++++++++++++++++++++++++

Зададимся целью написать функцию, рекурсивно выводящую все файлы и папки в указанной папке. Для нашего случая хорошо бы указать глубину рекурсии, вдруг кто будет запускать. Но я опускаю её для краткости:

Python
1
2
3
4
5
6
7
8
def re (string):
    for name in os.listdir(string):
        name = string + "" + name
        print (name)
        if os.path.isdir(name):
            re (name)
 
re ("С:\\foo")
Так, а теперь если запускать re с параметром <имя_диска>, что писать?

1) Писать re ("С:") неправильно, как мы выяснили
2) Писать re ("С:") вроде как правильно, только результаты получаются:

Windows Batch file
1
2
С:\\foo
С:\\foo\bar
То есть первый слэш всегда двойной. Ну то есть опять ничего хорошего. Есть какой-нибудь нормальный выход из этой ситуации?

++++++++++++++++++++++++++++++++++++++++++++

Ниже я привёл проверку на то, есть ли в строке двойные слэши и если есть, убираю один. Такая проверка всегда будет корявой, даже если её пригладить. Считай, из-за статистически редкого случая (когда исходная папку суть имя диска) всегда загружать интерпретатор лишней проверкой и загромождать код. Грустно.


Python
1
2
3
4
5
6
7
8
def re (string):
    for name in os.listdir(string):
        name = string + "" + name
        if (name [2] == "") and (name [3] == ""):
            name = name[:3] + name[4:]
        print (name[:3]+name[3:])
        if os.path.isdir(name):
            re (name)
0
26 / 26 / 23
Регистрация: 28.09.2016
Сообщений: 91
25.11.2016, 15:57 4
Провёл такой эксперимент: Запустил скрипт main.py в папке d:\foo - отработал нормально, вывелось содержание c:, потом такой же скрипт запустил из папки c:\foo, теперь вывелось содержание папки c:\foo. Запустил опять из d:\foo, вывелось содержание d:\foo. После перезагрузки ПК при запуске из d:\foo опять выводится правильно, содержание c:\
Эксперимент повторил, то же самое.
Сейчас скриншоты приложу.
0
26 / 26 / 23
Регистрация: 28.09.2016
Сообщений: 91
25.11.2016, 16:00 5
Эксперимент.
Миниатюры
Как вывести содержимое директории, используя os.listdir?   Как вывести содержимое директории, используя os.listdir?   Как вывести содержимое директории, используя os.listdir?  

0
26 / 26 / 23
Регистрация: 28.09.2016
Сообщений: 91
25.11.2016, 16:08 6
Вообще фигня какая та. Невероятно, но факт, у меня скрипт выполняется по разному, в зависимости от того в какой папке было второе неактивное окно в Total Commander'е в момент запуска cmd.
0
26 / 26 / 23
Регистрация: 28.09.2016
Сообщений: 91
25.11.2016, 16:20 7
А вот и ответ
Миниатюры
Как вывести содержимое директории, используя os.listdir?  
0
26 / 26 / 23
Регистрация: 28.09.2016
Сообщений: 91
25.11.2016, 16:24 8
Предлагаю такое решение:
Python
1
2
3
4
import os
os.chdir('c:\\')
for name in os.listdir("C:"):
    print (name)
0
563 / 303 / 189
Регистрация: 20.05.2016
Сообщений: 592
25.11.2016, 16:30 9
Цитата Сообщение от kravam Посмотреть сообщение
первый слэш всегда двойной
потому что вместо
Python
1
name = string + "\" + name
надобно
Python
1
name = os.path.join(string, name)
Убрать двойные слэши это
Python
1
os.path.normpath(r'С:\\foo\bar')
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
25.11.2016, 23:29  [ТС] 10
Цитата Сообщение от keepermag Посмотреть сообщение
у меня скрипт выполняется по разному
какой скрипт?
0
26 / 26 / 23
Регистрация: 28.09.2016
Сообщений: 91
26.11.2016, 03:40 11
Цитата Сообщение от kravam Посмотреть сообщение
import os
for name in os.listdir("C:"):
* * print (name)
Этот.

Получается что есть разница каким образом запускать и откуда запускать. Если этот main.py сам находится на d: и запустить без cmd через проводник, тогда выведется содержание c:. Если запустить cmd и в нём на c: зайти в какую нибудь папку, потом перейти обратно на d: и запустить main.py, то уже выведется содержимое той папки, в которую мы зашли на c:

Добавлено через 4 минуты
Мой вывод, c: это не законченный путь, а просто указание на диск, к которому добавляется путь текущей директории конкретно для этого диска.
1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
26.11.2016, 14:20  [ТС] 12
keepermag, ну я решил твой эесперимент повторить, но не дошёл, споткнулся на полпути о другую непонятку:

Итак, как я уже писал, скрипт, запущенный в C:\foo выводит список файлов текущей папки

ТОТ ЖЕ СКРИПТ запущенный в PyCharm (Ctrl +Shift +F10) выводит список диска C

Дальше я не пошёл. Грустно всё это. Конечно, "C:" решает, но что в таком случае строка "C:" и по каким правилам она интерпретируется интерпретатором в разных ситуациях?! Загадка!

++++++++++++++++++++++++++++++++++=

Добавлено через 6 минут
Цитата Сообщение от keepermag Посмотреть сообщение
Предлагаю такое решение:
Python
1
2
3
4
import os
os.chdir('c:\\')
for name in os.listdir("C:"):
 print (name)
Так уж сразу:
Python
1
2
3
import os
for name in os.listdir("C:\"):#Почему-то два слэша не пишутся
 print (name)
0
26.11.2016, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.11.2016, 14:20
Помогаю со студенческими работами здесь

Используя только операцию OUTCH, вывести содержимое регистра AX
Доброго времени суток. Начинаю изучать ассемблер по учебному пособию Пильщикова В.Н. и столкнулся с...

Вывести содержимое всех элементов массива структур на экран (используя указатели)
всем привет! нужна ваша помощ в ришении задач! 1 объявить указатель на структуру и используя...

Как удалить директории с поддиректориями, не используя -r?
Господа программисты, помогите пожалуйста с лабораторной работой. Задание: Удалить указанные в...

Вывести содержимое корневого каталога логического диска А, используя Handle-ориентирование и 13 прерывание
люди, вот у меня задание: вывести содержимое корневого каталога логического диска А, используя...

Как узнать размер директории, используя рекурсию
как узнать размер директории используя рекурсию?

Вывести в консоль все файлы и директории, какие есть в текущей директории
вывести в консоль все файлы и директории какие есть в текущей директории. подскажите пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru