Есть ли способ проверить имя файла, которое начинается с di git? - PullRequest
0 голосов
/ 27 января 2020

Я написал этот код:

fileName = []

def listdir(k):

    files = os.scandir(k)
    for f in files:
        if f.is_file() and f[0].isdigit():
            print('this is a file')
            print(f)
            fileName.append(f)

        else:
            listdir(f)

listdir(path)

, но получил сообщение об ошибке для if f.is_file() and f[0].isdigit() Сообщение об ошибке: TypeError: 'posix.DirEntry' object is not subscriptable Имя моего файла обычно выглядит следующим образом 9867_1_dimensional-set-shifting_results.csv, но есть некоторые файлы, например .DS_Store и текстовый файл внутри каталога. Я хочу посмотреть, есть ли способ проверить файлы, оканчивающиеся на .csv.

Ответы [ 4 ]

0 голосов
/ 27 января 2020

Возможно, это будет полезно:

import os

fileName = []

def listdir(k):

    files = os.scandir(k)
    for f in files:
        if f.is_file():
            if f.name.split('.')[-1] == 'csv':
                print('this is a file')
                print(f)
                fileName.append(f)
        else:
            listdir(f)

listdir(path)

0 голосов
/ 27 января 2020

Использование os.path.splitext(path) отделяет путь + имя файла от имени расширения.
тогда вы можете получить кортеж.

os.path.splitext("C:/User/9867_1_dimensional-set-shifting_results.csv")  

>>>
('C:/User/9867_1_dimensional-set-shifting_results', '.csv')

Использование функции os.walk() позволяет получить все файлы в каждом каталоге.

def get_filepath(path):
    fileName = []
    for path, folder, files in os.walk(path):
        for filename in files:
            ext = os.path.splitext(filename)[-1] #extansion
            if ext == '.csv':
                file_path = path + "/" + filename
                print(file_path)
                fileName.append(file_path)
    return fileName

get_filepath("your path")
0 голосов
/ 27 января 2020

Вы должны получить имя файла из указателя файла:

fileName = []


def listdir(k):
    files = os.scandir(k)
    for f in files:
        if f.is_file() and f.name[0].isdigit():
            print('this is a file')
            print(f)
            fileName.append(f)

        else:
            listdir(f)
0 голосов
/ 27 января 2020

Когда вы перебираете файлы, вы должны убедиться, что вы рассматриваете f как строку. Для этого просто получите имя файла, выполнив: f.name

Ваш код должен выглядеть примерно так:

fileName = []

listdir(k):
    files = os.scandir(k)
    for f in files:
        if f.is_file() and f.name[0].isdigit():
            print('this is a file')
            print(f)
            fileName.append(f)
        else:
            listdir(f)

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