【Python】glob用法 & global用法

总是有点弄混glob和global,做下记录。

  • glob 为 n. 一滴;水珠;一团
  • global 为 adj. 全球的;总体的;球形的

目录

1、glob用法

2、global用法


 1、glob用法

query_imgs_path += glob.glob(os.path.join(QUERY_PATH, id, '*.jpg'))

这样就可以获取,这个目录下 os.path.join(QUERY_PATH, id),所有以.jpg存储的图片的地址,这些地址存在query_imgs_path这个list中。

说明:

      glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索,支持通配符操作,*,?,[]这三个通配符,*代表0个或多个字符,?代表一个字符,[]匹配指定范围内的字符,如[0-9]匹配数字。两个主要方法如下。

      glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表,该方法需要一个参数用来指定匹配的路径字符串(本字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。

比如:

获得C盘下的所有txt文件

glob.glob(r'c:\*.txt')

获得指定目录下的所有jpg文件

glob.glob(r'E:\pic\*\*.jpg')

使用相对路径:

glob.glob(r'../*.py')

一个完整的例子,里面还涉及到 iglob 模块。

import glob
import os

path = r"mypath/q"

for file in os.listdir(path):
    print(file)
"""
path路径下有这4个文件
a.txt
b.txt
c.txt
d.txt
"""

print("---glob测试---")
txt_path = glob.glob(os.path.join(path, "*.txt"))
print(txt_path)
"""
txt_path是一个list
['mypath/q/a.txt', 'mypath/q/b.txt', 'mypath/q/c.txt', 'mypath/q/d.txt']
"""


print("---iglob测试---")
i_txt_path = glob.iglob(os.path.join(path, "*.txt"))
print(i_txt_path) # 
"""
i_txt_path是一个迭代器,返回的是一个地址
需要循环去遍历
使用 # print(i_txt_path[0]) # TypeError: 'generator' object is not subscriptable
会显示这是一个迭代器,不能用下标去访问
正确访问如下:
"""

for i in i_txt_path:
    print(i)
    
"""
mypath/q/a.txt
mypath/q/b.txt
mypath/q/c.txt
mypath/q/d.txt
"""

 

2、global用法

如果需要在函数内部改变函数外部的变量,就可以通过在函数内部声明变量为global变量。这样当程序运行至global变量便会替换外部的同名变量。

global---将变量定义为全局变量。可以通过定义为全局变量,实现在 函数内部 改变 函数外部 的变量值

一个global语句可以同时定义多个变量,如 global x, y, z。

首先尝试不加 global

# -*- coding:utf-8 -*-

name = "小明"

def test():
    name = "xiaoming"
    print("--------test中的name: ", name)
    return name

if __name__ == "__main__":
    print("无global ", name)
    print("无global ", test())
    print("无global ", name)

"""
无global  小明
--------test中的name:  xiaoming
无global  xiaoming  # 虽然函数内部的变量改变了
无global  小明   # 但是 发现外部的变量还是没有改变
"""

添加了global后,

name = "小明"

def test2():
    global name
    name = "xiaoming"
    print("---------test2中的name: ", name)
    return name

def f1():
    print("f1中的name: ", name)
    return name

if __name__ == "__main__":

    print("有global ", name)
    print("有global ", test2())
    print("有global ", name)
    print(f1())

"""
有global  小明  # 第一次访问外部name变量
---------test2中的name:  xiaoming
有global  xiaoming    # test2函数修改了name的值
有global  xiaoming    # 因为是global的值,所以外部的变量值也改变了
"""

"""
当有新的函数f1()访问这个外部的name变量,可以看出访问的也是修改之后的。。。
f1中的name:  xiaoming
xiaoming
"""

 

 

 

无关的内容 。。。

a = []
for i in range(5):
    a += [i]
print(a)  # [0, 1, 2, 3, 4]

参考:

python包:glob用法

python之global用法

你可能感兴趣的:(编程语言,1024程序员节)