美文网首页
python 文件(1)

python 文件(1)

作者: OldSix1987 | 来源:发表于2016-09-01 20:18 被阅读16次

    以下运行环境均在Python3.5.1

    问题


    (1)urllib2

    
    # 在Python3中,urllib2写法为:
    
    import urllib.request
    req = urllib.request.urlopen(url)
    buf = req.read()
    

    utf8问题

    import urllib.request
    import re
    
    req = urllib.request.urlopen(url)
    buf = req.read()
    listurl = re.findall(r'http:.+\.jpg', buf.decode('utf8')) 
    

    使用urllib2解析回来的html文件要用utf8编码变一下,否则会报错:cannot use a string pattern on a bytes-like object

    urllib2使用参考文件

    (2)生成目录,存在的话就不再重新创建

    // 获取当前文件路径
    # cur_dir = os.path.abspath('.')
    cur_dir = os.path.dirname(__file__)
    
    // 要生成的新文件路径
    new_path = os.path.join(cur_dir, 'new_dir_name')
    
    // 路径如果已存在,就不再重复创建
    if not os.path.isdir(new_path):
        os.makedirs(new_path)
        print(new_path)
    

    os.path.join(path, 'title') 这个函数无法创建目录和文件,只能做拼接而已


    (3)全局变量

    i = 1
    
    def test(list):
        for x in list:
            i+=1
            print(i)
    
    test([1,2,3])
    
    

    这里运行后,会直接报错:UnboundLocalError: local variable 'i' referenced before assignment

    修改后

    i = 1
    
    def test(list):
        for x in list:
            global i
            i+=1
            print(i)
    
    test([1,2,3])
    

    运行后,ok


    (4)写文件

    // 标准写法还是要用:with open('filename', 'mode')as f:
    
    with open(imgpath, 'wb') as f:
         req = urllib.request.urlopen(url)
         buf = req.read()
         f.write(buf)
    
    

    如果写入资源为二进制文件(比如图片),则open的函数选项一定否选择wb,否则会报以下错误:
    TypeError: must be str, not bytes


    (5)文件一定要写到正确的路径才对

    def downloadImgs(listurl):
        for url in listurl:
            global num
            imgpath = os.path.join(cur_dir, 'imgs\\')   #由于笔误,直接把imgs这个目录拿来写文件,导致一直报错,大意!
            # print(imgpath)
            # imgpath = imgpath + str(num) + '.jpg' # 修改为真实图片格式路径后,问题消失
            with open(imgpath, 'wb') as f:
                req = urllib.request.urlopen(url)
                buf = req.read()
                f.write(buf)
                num+=1
    

    如果向一个目录中写二进制内容,会报错以下错误:
    [Errno 13] Permission denied

    相关文章

      网友评论

          本文标题:python 文件(1)

          本文链接:https://www.haomeiwen.com/subject/rxhhettx.html