Нужно ли мне передать полный путь к файлу в другой каталог, чтобы открыть ()?
у меня есть папка с десятью файлами, которые необходимо перебрать. Когда я распечатываю имя файла, мой код отлично работает:
import os
indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
for f in filenames:
print(f)
, который печатает:
1
2
3
4
5
6
7
8
9
10
но если я попытаюсь открыть файл в цикле я получаю ошибку ввода-вывода:
import os
indir = '/home/des/test'
for root, dirs, filenames in os.walk(indir):
for f in filenames:
log = open(f, 'r')
Traceback (most recent call last):
File "/home/des/my_python_progs/loop_over_dir.py", line 6, in <module>
log = open(f, 'r')
IOError: [Errno 2] No such file or directory: '1'
>>>
мне нужно передать полный путь к файлу даже внутри цикла в open()
них?
5 ответов:
Да, нужен полный путь.
log = open(os.path.join(root, f), 'r')
- Это легко исправить. Как было указано в комментарии,
os.walk
опускается на подкаталоги, так что вы должны использовать текущий корневой каталог, а неindir
как основание для соединения пути.
Если вы просто ищете файлы в одном каталоге (т. е. вы не попытка пересечь дерево каталогов, на которое оно не похоже), почему бы просто не использовать ОС.listdir():
import os for fn in os.listdir('.'): if os.path.isfile(fn): print (fn)
на месте os.прогулка(). Вы можете указать путь к каталогу в качестве параметра ОС.listdir(). ОС.путь.isfile() определит, является ли данное имя файла для файла.
вы должны указать путь, по которому вы работаете:
source = '/home/test/py_test/' for root, dirs, filenames in os.walk(source): for f in filenames: print f fullpath = os.path.join(source, f) log = open(fullpath, 'r')
примеры для ОС.заходите документация показать, как это сделать:
for root, dirs, filenames in os.walk(indir): for f in filenames: log = open(os.path.join(root, f),'r')
Как вы ожидали, что функция " открыть "узнает, что строка" 1 "должна означать" /home/des/test/1 "(Если" /home/des/test " не является вашим текущим рабочим каталогом)?