开头导入模块

import os
import platform
import subprocess
import platform

os模块用来读写文件
platform用来获取操作系统信息
Linux输入pstree看进程树,而windows里面用tasklist。发现Chrome开多少个窗口就有多少个进程
subprocess是子进程创建和调度模块
subprocess详解

CHECKSUMS = {'datasets.z01': 'da46277afe85d3a91c065e4751fb8175','datasets.z02': 'e274a9646323d954b00094ea424e4e4c',

这是一个字典,键是’datasets.z01’,单引号表示里面是字符串,这些文件合起来解压,成为一个zip


def main():#Python 字典 keys() 方法以列表形式(并非直接的列表,若要返回列表值还需调用list函数)返回字典中的所有的键,例如datasets.z266files = CHECKSUMS.keys()#双引号里面是字符串url_root = "https://data.csail.mit.edu/graphics/demosaicnet"#os.path.abspath(_file_)返回脚本的绝对路径# 再来一个os.path.dirname,就是脚本的父目录的绝对路径,即D:\image_processing\try\demosaicnet_torch-masterdst = os.path.dirname(os.path.abspath(__file__))for f in files:# 路径拼接,例如第一个fname是D:\image_processing\try\demosaicnet_torch-master\datasets.z01fname = os.path.join(dst, f)#第一个url是https://data.csail.mit.edu/graphics/demosaicnet\datasets.z01url = os.path.join(url_root, f)# curl和wget下载方式,curl更高级些dl_cmd = ['curl', '-o', f, url]# dl_cmd = ['wget', '-nv', url]# 如果path存在if os.path.exists(fname):# 就说已经下载了,正在检查md5print(f, 'already downloaded. Checking md5...')else:# 否则就在说正在下载print("Running", " ".join(dl_cmd))# 创建进程,开始下载文件,并且对的子进程完成ret = subprocess.call(dl_cmd)#看是哪个操作系统# 如果是Linuxif platform.system() == "Linux":# args 是['md5sum', fname],例如md5sum /d/image_processing/try/data/datasets.z01,这是linux下面的一个命令# 标准输出流stdout,Run the command described by args. Wait for command to complete, then return a CompletedProcess instance.获取比特序列# subprocess.Popen是一个类,check是一个实例check = subprocess.Popen(['md5sum', fname], stdout=subprocess.PIPE)# Python用花括号表示字典和集合两种对象:花括号内是空的,或者是键值对的,表示字典;花括号内是无重复元素的,表示集合。# {print $1} 就是将某一行(一条记录)中以空格为分割符的第一个字段打印出来。# awk用来提取列,作用是显示下载过程checksum = subprocess.Popen(['awk', '{ print $1 }'], stdin=check.stdout, stdout=subprocess.PIPE)# communicate() returns a tuple (stdout_data, stderr_data).# strip去掉输出结果最后一行的换行符checksum = checksum.communicate()[0].strip()# 没有windows,只能在linux上面跑了elif platform.system() == "Darwin":check = subprocess.Popen(['cat', fname], stdout=subprocess.PIPE)checksum = subprocess.Popen(['md5'], stdin=check.stdout, stdout=subprocess.PIPE)checksum = checksum.communicate()[0].strip()else:raise Exception("unknown platform %s" % platform.system())# 输出计算出的md5码,以及文件本身的MD5码print("Checksum:", checksum, CHECKSUMS[f])if checksum == CHECKSUMS[f]:print(f, "MD5 correct, no need to download.")continueelse:print(f, "MD5 incorrect, re-downloading.")try:# MD5校验不通过,删除文件os.remove(fname)except OSError as e:print("Could not delete {}: {}".format(f, e))raise ValueErrorret = subprocess.call(dl_cmd)system = platform.system()print("Joining zip files")# 把压缩包全集合到一起cmd = " ".join(["zip", "-FF", os.path.join(dst, "datasets.zip"), "--out", os.path.join(dst, "joined.zip")])subprocess.check_call(cmd, shell=True)print("Extracting files")cmd = " ".join(["unzip", os.path.join(dst, "joined.zip")])subprocess.check_call(cmd, shell=True)

报错,windows那段用darwin和linux的都不行

但是用curl下载的时候一直报错说md5 incorrect
用wget下载又不行
先研读subprocess官方手册
md5sum是linux下的指令

awk工作原理
报错的时候很明显MD5码是一样的,奇怪,正常情况为什么要报错,就多了一个b’

都是一样的,只不过计算出来的是以b’开头,一种方法是删掉md5码检验部分,但是保留输出信息
另一种方法是把文件键值的md5码都加上b’,后者显然更加保险,先给两个文件加上试试看
但是还是不行
决定删掉md5校验的代码
下载的时候,z64的图标有问题
电脑存储太小,只能一边下载一边移动,不太会设置挂载盘符
z20没下载
还没移动的:63-99,dataset_zip
在移动的:267-333
U盘里有Trash文件夹·
linux系统删除文件后还是没有free空间
解决方法:显示隐藏文件
然后删除.Transh-1000就行了
下载后的文件太大了,winrar还不能用,换成7-Z就可以了,z01解压出来就得
在看hashlib的时候发现,可能是模块校验生成的MD5码是byte string类型的,而字典里面存放的md5是string类型的,因此字典的字符加上b’'之后还是不等于文件的md5

download_dataset.py代码研究相关推荐

  1. python exe文件运行依赖环境_python将py代码文件转换为EXE脱离环境运行

    如何将python将py代码文件编译成为EXE文件,让其能够脱离python环境独立运行? 方法是有的,下面大家请看如何来操作. 我的环境是VS2017,同时安装了ironpython 一.安装pyi ...

  2. YOLOV5dataset.py代码注释与解析

    YOLOv5代码注释版更新啦,注释的是最近的2021.07.14的版本,且注释更全 github: https://github.com/Laughing-q/yolov5_annotations Y ...

  3. yolov5的detect.py代码详解

    目标检测系列之yolov5的detect.py代码详解 前言 哈喽呀!今天又是小白挑战读代码啊!所写的是目标检测系列之yolov5的detect.py代码详解.yolov5代码对应的是官网v6.1版本 ...

  4. YOLO系列 --- YOLOV7算法(二):YOLO V7算法detect.py代码解析

    YOLO系列 - YOLOV7算法(二):YOLO V7算法detect.py代码解析 parser = argparse.ArgumentParser()parser.add_argument('- ...

  5. yolo模型(四)绘制PR曲线所用到的reval_voc_py.py代码

    在绘制PR曲线时要自己生成一个pkl文件,需要reval_voc_py.py代码来生.现贴出基于python2和python3的代码,按照自己的python版本直接复制即可.拿走不谢~ reval_v ...

  6. yolov5——detect.py代码【注释、详解、使用教程】

    yolov5--detect.py代码[注释.详解.使用教程] yolov5--detect.py代码[注释.详解.使用教程] 1. 函数parse_opt() 2. 函数main() 3. 函数ru ...

  7. Web3j监听功能代码研究

    Web3j监听功能代码研究 高洪涛 2021-03-19 本周深入研究了web3j工具包实现以太坊的监听功能,实现了交易监听和代币监听的方法,对监听过程中的常见问题进行了处理,本文就是对这部分开发经验 ...

  8. YOLOv4数据集制作与批量处理工具.py代码

    这篇文章主要复现数据集打标签的制作过程,以及与YOLOv4的数据集制作和数据增强. 包括: 一.voc标签 二..xml(voc格式)转.txt(yolo格式) 三.批量改文件名 四.批量修改txt文 ...

  9. PigYear病毒 代码 研究

    PigYear病毒 代码 研究 PigYear.cpp #include "stdafx.h" #include "PigYear.h" #include &q ...

最新文章

  1. telnet检查接收邮件命令
  2. python matplotlib画图的几个实例--latex,坐标系等
  3. 半潜式平台及其动力定位系统
  4. 温州大学《机器学习》课程代码(四)朴素贝叶斯
  5. 服务器损坏mysql修复_云服务器mysql数据库损坏修复mysql
  6. jQuery WeUI 上传
  7. 调整自己--提升自己
  8. 记一些Python(Pymysql)建表、增删改查等基础操作(小白适用)
  9. UI必备!不同形式的图标设计灵感
  10. ES6 Promise - 让我们解开的面纱(遵循Promise/A+规范)
  11. android 字体设置方正,(技术)Android 默认非衬线字体修改为衬线字体
  12. 百度云网盘高速通道加速破解版 去广告纯净版干净云
  13. 智能化施工(综合管线)
  14. 我被开除了。。只因为看了骂公司的帖子
  15. 程序员的奋斗史(三十一)——人在囧途之应聘篇(一)
  16. rar password recover(rar密码恢复工具) v2.0.0.0
  17. 无刷直流电动机矢量控制(四)——simulink仿真搭建(让电机动起来)
  18. 数据库点滴之T-SQL面试语句,练练手
  19. vue全局引入openlayers_vue+openlayers绘制省市边界线
  20. 微信小程序星星评分代码片段(含半星)

热门文章

  1. dwz框架---(1)如何学习dwz框架
  2. Excel表格怎么批量导出图片将文件中的图片导出到文件夹中
  3. RK3568用户自定义开机画面功能
  4. 程序员找工作有哪些面试技巧
  5. 总结:SpringBoot内嵌Tomcat原理
  6. 在线计费系统解决方案
  7. pycharm 配置局域网访问,局域网无法访问解决办法
  8. 若依前端实现权限管理
  9. Unity人物第三人称移动
  10. Java中super关键字详解