чтение всех файлов в каталоге с определенным расширением с использованием glob python - PullRequest
0 голосов
/ 04 июня 2018

У меня есть каталог с дополнительными подкаталогами, каждый из которых имеет файлы с определенным расширением.Я могу получить имена всех файлов, используя функцию glob:

for name in glob.glob('*/*[a-b]*'):
      print(os.path.basename(name))

, которая печатает имена файлов, которые у меня есть во всех подкаталогах:

PF44_aa
PF52_aa
PF95_aa
PF38_aa
PF45_aa
PF63_aa
PF68_aa
PF39_aa

Однако, еслиЯ передаю эти имена файлов в качестве аргументов, чтобы открыть файлы и прочитать их содержимое:

for name in glob.glob('*/*[a-b]*'):
    filename=os.path.basename(name)
    with open('%s' %filename) as fn:
        content = fn.readlines() 

Я получаю следующую ошибку:

 File "<ipython-input-194-147f38fc2684>", line 1, in <module>
    with open('%s' %filename) as fn:

FileNotFoundError: [Errno 2] No such file or directory: 'PF44_aa'

Я также попытался указать имя файла непосредственно в качестве ввода вместоиз %s:

for name in glob.glob('*/*[a-b]*'):
    filename=os.path.basename(name)
    with open(filename) as fn:
        content = fn.readlines() 

Но все равно появилась та же ошибка:

File "<ipython-input-193-fb125b5aa813>", line 1, in <module>
    with open(filename) as fn:

FileNotFoundError: [Errno 2] No such file or directory: 'PF44_aa'

Что я делаю не так и как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы должны использовать полный путь к файлу, чтобы открыть его, вы не можете использовать просто имя файла, если только он не находится в том же каталоге, что и ваш файл python.Поэтому вы должны внести небольшие изменения в ваш скрипт, чтобы он заработал.

for name in glob.glob('*/*[a-b]*'):
    with open(name) as fn:
        content = fn.readlines()

имя файла заменяется на имя.
здесь, имя = полный путь к вашему файлу.

0 голосов
/ 04 июня 2018

Альтернативный метод ...

Начните с первого импорта:

import shutil
import os

Затем присвойте каталог списку:

file_list = []    
file_list = os.listdir('C:/filepath')

Теперь различайте файлы:

files = []
files = [x for x in file_list if "_aa" in x]

Теперь вы можете открывать и читать файлы в списке файлов, используя ваш метод.

однако выполните:

filepath + filename
with open(filepath + filename) as fn:
content = fn.readlines() 

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

исход:

"C:/filepath/PF44_aa"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...