Я мог бы использовать некоторую помощь в переборе каталога с файлами нескольких классов. Каждый образец содержит два класса (например, первый образец в моей базе данных — 1001, и этот файл включает 1001.dat и 1001.hea), и я хочу выполнить итерацию по своему каталогу и получить доступ ко всем файлам .dat отдельно от файлов .hea. . Прямо сейчас простое перебор каталога приводит к ошибке File-Not-Found.
Я предоставлю дополнительный исходный код, чтобы дать этому некоторый контекст, но сначала позвольте мне показать вам, где я застрял.
Используя базу данных ЭКГ PhysioNet, сейчас цель состоит в том, чтобы проанализировать каждый файл .dat (в моем примере ниже реализован тест Дики-Фуллера с использованием adfuller из statsmodels.tsa.stattools). Я загрузил свои данные в Google Colab, используя следующее:
from google.colab import files
uploaded = files.upload()
Я могу легко получить доступ к определенному образцу из моей базы данных. Например, если я хочу прочитать образец с помощью WFDB, я могу сделать это без проблем:
wfdb.rdsamp('1001') #1001 is the name of the first sample in my directory
Но когда я пытаюсь перебрать все эти образцы, я сталкиваюсь с проблемой. Вот что у меня есть до сих пор:
for dat in uploaded:
file = wfdb.rdsamp(dat) #this is where I get the error (below)
В закомментированной строке я получаю следующую ошибку:
FileNotFoundError: [Errno 2] No such file or directory: '/content/1001.dat.hea'
Я считаю, что это потому, что каждый файл содержит два класса, как вы можете видеть, когда я печатаю тип моего файла...
Исходный код:
print(type(uploaded)) #print directory 'uploaded' type (declared in first code block)
for dat in uploaded: #iterate through directory 'uploaded'
print(type(dat)) #print file type
Результат:
<class 'dict'>
<class 'str'>
<class 'str'>
Итак, что я хочу сделать, это указать первый класс 'str' (то есть .dat). Мне нужно использовать только данные, содержащиеся в 1001.dat и т. д. Я просто не знаю, как указать это в Python.
Теперь, как и было обещано, еще немного кода для большего контекста.
Все это работает:
#get records.
sample = '1001' #first sample in database
record = wfdb.rdrecord(sample) #read record
FHR = (wfdb.rdsamp(sample))[0][:,0] #FHR with 0's; FHR = fetal heart rate
newFHR = [i for i in FHR if i > 0] #FHR without values <= 0
#plot sample record
wfdb.plot_wfdb(record = record, title = sample)
DF_test_result = adfuller(FHR) #Dickey-Fuller Test
#print results
print ("Results with values <= 0")
print ( "ADF:")
ADF = DF_test_result[0]
print(ADF, "\n")
DF_test_result = adfuller(newFHR) #Dickey-Fuller Test
#print results
print ("Results with values > 0")
print ( "ADF:")
ADF = DF_test_result[0]
print(ADF, "\n")
Это то, над чем я сейчас работаю. Мой синтаксис может быть не совсем правильным для тела моего цикла for (опять же, я новичок в Python), но я могу понять остальное, если смогу получить доступ к правильным образцам для каждой итерации:
#declare arrays for adf & pvals
adf = []
pvals = []
#get records
for dat in uploaded:
file = wfdb.rdsamp(dat) #ERROR IS HERE
FHR = file[0][:,0] #FHR with 0's
newFHR = [i for i in FHR if i > 0] #FHR without 0's
DF_test_result = adfuller(newFHR) #Dickey-Fuller Test
adf.append(DF_test_result[0]) #add adf
pvals.append(DF_test_result[1]) #add pvals
Спасибо, и обязательно дайте мне знать, как я мог бы отформатировать этот пост лучше. Я все еще учусь, как публиковать полезные вопросы на этой платформе. Это мой третий вопрос в StackOverflow.
wfdb.rdsamp('1001')
успешно вызывает файл? - person PacketLoss   schedule 13.03.2020print(uploaded)
? - person iz_   schedule 13.03.2020print(uploaded)
беспорядок. Я опубликую первую часть этого, и дайте мне знать, если есть что-то, что вы хотите, чтобы я нашел.'1001.dat': b'\xca:\xbc\x
- person abelllizard   schedule 24.03.2020