问题描述
我试图读取绝对路径给出的文件。 当我第一次运行代码时,我看到的是以下消息:
D:\prog\datascience\anaconda\lib\site-packages\pydub\utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg,but may not work
warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg,but may not work",RuntimeWarning)
我尝试过:
PATH_TO_FFMPEG = 'D:\\prog\\ffmpeg-win-2.2.2\\ffmpeg.exe'
pydub.AudioSegment.converter = r'D:\\prog\\ffmpeg-win-2.2.2\\ffmpeg.exe'
然后我分别将ffmpeg
和pip
一起安装了。但这没有帮助。
当我尝试这个:
raw_sound = pydub.AudioSegment.from_mp3(file=track_path)
其中track_path
是自动生成的正确绝对路径。
所以我得到了这个错误:
Traceback (most recent call last):
File "D:\prog\PyCharm Community Edition 2020.2.2\plugins\python-ce\helpers\pydev\pydevd.py",line 1448,in _exec
pydev_imports.execfile(file,globals,locals) # execute the script
File "D:\prog\PyCharm Community Edition 2020.2.2\plugins\python-ce\helpers\pydev\_pydev_imps\_pydev_execfile.py",line 18,in execfile
exec(compile(contents+"\n",file,'exec'),glob,loc)
File "D:/testtask2/test_task/testtask/get_mffc.py",line 165,in <module>
slice_all_in_a_dir('May 27 2020 LNC/Hydrophone 1/raw_records')
File "D:/testtask2/test_task/testtask/get_mffc.py",line 70,in slice_all_in_a_dir
slice_samples(track_path= [file],File "D:/testtask2/test_task/testtask/get_mffc.py",line 48,in slice_samples
raw_sound = pydub.AudioSegment.from_mp3(file=track_path)
File "D:\prog\datascience\anaconda\lib\site-packages\pydub\audio_segment.py",line 738,in from_mp3
return cls.from_file(file,'mp3',parameters=parameters)
File "D:\prog\datascience\anaconda\lib\site-packages\pydub\audio_segment.py",line 680,in from_file
stdin_data = file.read()
AttributeError: 'list' object has no attribute 'read'
python-BaseException
使用时的完整代码:
def slice_samples(track_path: list,save_path: str,sample_folder_name: str,interval: float,given_format,name: str = "part",export_format = 'wav'):
"""
This metod slice given track to parts.
:param track_path: str,a path to the track you want to slice
:param save_path: str,a path to folder,where you want save sliced tracks
:param sample_folder_name: str,you don't need to create a folder for sliced tracks,you can just write the name of the folder in this argument where you want to save tracks
:param interval: float,measure in seconds,the length of sliced tracks
:param name: str,name of sliced tacks
:param given_format: str,I strongly recommend use .wav format initially,when you record sounds
:return: folder with sliced tracks
"""
# it cuts a file in mp3 or wav formats (wav recommended)
interval_secs = interval * 10 ** 3
raw_sound = None
if given_format == "WAV":
raw_sound = pydub.AudioSegment.from_wav(file=track_path)
elif given_format == "MP3":
raw_sound = pydub.AudioSegment.from_mp3(file=track_path)
else:
raise Exception("It's temporarily unsupported given_format: " + given_format)
start = 0
end = interval_secs
i = 0
while end < len(raw_sound):
save_to = save_path + sample_folder_name + "/" + name + str(i)
part = raw_sound[start:end]
part.export(save_to,format=export_format)
i += 1
start += interval_secs
end += interval_secs
return save_path + sample_folder_name
def slice_all_in_a_dir(tracks_folder: str):
files = os.listdir(tracks_folder)
for file in files:
folder_name = file.split('.')
f_name = folder_name[0]
file = tracks_folder+'/'+file
file = os.path.abspath(file)
slice_samples(track_path= [file],save_path= PATH_FOR_SLICED,sample_folder_name= f_name,interval=5,given_format=folder_name[1])
if __name__ == "__main__":
slice_all_in_a_dir('May 27 2020 LNC/Hydrophone 1/raw_records')
解决方法
能否请您分享您正在使用的代码,这将有助于找到确切的问题。
if ($total_arr)
{
$classes = array();
foreach ($total_arr as $bb_ky => $bb_v)
{
$dayToCheck = date('l',strtotime($bb_v->openingtimed));
switch($dayToCheck)
{
case "Monday" :
$classes[1]['monday'][] = $bb_v;
break;
case "Tuesday" :
$classes[2]['tuesday'][] = $bb_v;
break;
case "Wednesday" :
$classes[3]['wednesday'][] = $bb_v;
break;
case "Thursday" :
$classes[4]['thursday'][] = $bb_v;
break;
case "Friday" :
$classes[5]['friday'][] = $bb_v;
break;
case "Saturday" :
$classes[6]['saturday'][] = $bb_v;
break;
}
}
if(!empty($classes))
{
foreach($classes as $weekDay)
{
foreach($weekDay as $theDayName=>$class)
{
echo "<h2>".ucfirst($theDayName)."</h2>";
foreach($class as $row)
{
$dayName = date('l',strtotime($row->openingtimed));
$setStartD = date('m-d-Y',strtotime($row->openingtimed));
$setStartT = date('h.i a',$row->openingtime);
$setEndT = date('h.i a',$row->closingtime);
$chkStart = date('Y-m-d H:i',$row->openingtime);
$chkEnd = date('Y-m-d H:i',$row->closingtime);
?>
<div class="col-md-12">
<h5 class="subtitle"><?php echo $dayName . ' ' . $setStartD; ?></h5>
</div>
<div class="col-xl-3 col-sm-6 mb-3" >
<div class="card dark-white bg-default o-hidden h-100 mt-3">
<div class="card-body pb-0">
<div class="class-status"><?php echo $status; ?></div>
<div class="live-btn"><?php echo $livebtn; ?></div>
<p class="live-class-left"><?php echo $row->name ?></p>
<small><i class="far fa-calendar-alt"></i> <?php echo $setStartD; ?></small><br>
<small><i class="far fa-clock"></i> <?php echo $setStartT; ?> to <?php echo $setEndT; ?></small>
<img class="mr-1 float-right" src="<?php echo $CFG->wwwroot ?>/theme/iomadboost/images/mod_images/live-icon.png">
</div>
</div>
</div>
<?php
}
}
}
}
}
该错误还表明该文件被视为列表,而不是以下代码中的文件
AttributeError: 'list' object has no attribute 'read'
希望我给出了解决方案。