写得第一个python小程序,感觉还挺方便,话不多说,上代码。
需求:
数据库voice_record中字段model_id相同的语音文件记录会用于同一个建模,为了方便处理,需要把model_id相同的语音文件放在一个文件夹中以方便处理,文件夹名为model_id。
解决步骤:
1. 从数据库中把model_id和url这两列导出到voice.sql
select model_id,url from voice_record into outfile '/home/cheyunlong/mysql/voice.sql'
(这儿的导出路径应该是MySQL有权限的文件夹)
导出的文件如下:
2. (这一步操作其实可以省略掉,但是已经做了,就只好继续啦)把所有文件复制到一个文件夹里
(1)备份voice.sql文件
cp voice.sql ./voice_bak.sql
(2) 用awk命令把原文件第一列和第三列替换,并把结果输出到cp_voice.sh
awk '{print "cp",$s2,"/data/cheyunlong/sql/"}' voice_bak.sql > /data/cheyunlong/sql/cp_voice.sh
结果如下:
(3) 给cp_voice.sh授权并执行 cp_voice.sh
chmod 755 cp_voice.sh
bash ./cp_voice.sh
此时会把所有需要的文件都复制到一个文件夹
3. (这一步操作时本想请教策爷帮忙写一个脚本直接运行,策爷答复是用Python些会容易些)按照model_id建立文件夹并把相应的文件放到同一个文件夹下。
建classify.py : vim classify.py
import os
import shutil
basepath = '/data/cheyunlong/_20170117/test_python'
init_base_path = '/data/cheyunlong/_20170117/test'
for f in open("/data/cheyunlong/_20170117/sql/voice.sql"):
line = f.strip().split()
basename = line[0]
url = line[1].split("/")[6];
needcp = line[1]
folder = os.path.join(basepath,basename)
fileurl = os.path.join(init_base_path,url)
filename = os.path.join(folder,needcp)
if os.path.exists(folder):
print("hi,bye")
else:
os.mkdir(folder)
if os.path.exists(fileurl):
shutil.copy(fileurl,folder)
else:
print("file not exists")
运行python文件:
python3 ./classify.py
分类完成。