目录
os.path.isdir()和os.path.isfile()方法:
【pytorch】named_parameters()和parameters()
os.path.exists()
os.path模块主要用于文件的属性获取,exists是“存在”的意思,所以顾名思义,os.path.exists()就是判断括号里的文件是否存在的意思,括号内的可以是文件路径。
举个栗子:
user.py为存在于当前目录的一个文件
输入代码:
import os
path = os.path.exists('user.py')
print(path)
输出结果:
True
Process finished with exit code 0
如果不存在,返回的则是FALSE。
shutil模块
shutil.copyfile( src, dst) #从源src复制到dst中去。 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst) #移动文件或重命名
shutil.copymode( src, dst) #只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst) #复制权限、最后访问时间、最后修改时间
shutil.copy( src, dst) #复制一个文件到一个文件或一个目录
shutil.copy2( src, dst) #在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
shutil.copy2( src, dst) #如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase) #把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
shutil.rmtree( src ) #递归删除一个目录以及目录内的所有内容
os.mkdir():
os.mkdir() 方法用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。
语法:
os.mkdir(path[, mode])
参数:
-
path -- 要创建的目录
-
mode -- 要为目录设置的权限数字模式
返回值:该方法没有返回值。
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily/hourly"
os.mkdir( path, 0755 );
print("目录已创建")
flush() 方法:
描述:
Python 文件 flush() 方法是用来把文件从内存buffer(缓冲区)中强制刷新到硬盘中,同时清空缓冲区。
一般情况下,文件关闭后会自动刷新到硬盘中,但有时你需要在关闭前刷新到硬盘中,这时就可以使用 flush() 方法。
flush() 方法语法如下:
fileObject.flush()
参数:
-
无
该方法没有返回值。
#!/usr/bin/python3
# 打开文件
fo = open("runoob.txt", "wb")
print ("文件名为: ", fo.name)
# 刷新缓冲区
fo.flush()
# 关闭文件
fo.close()
fileno() 方法:
描述:
Python 文件 fileno() 方法返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
语法:
fileno() 方法语法如下:
fileObject.fileno()
返回值:
返回文件描述符。
实例:
以下实例演示了 fileno() 方法的使用:
#!/usr/bin/python3
# 打开文件
fo = open("runoob.txt", "wb")
print ("文件名为: ", fo.name)
fid = fo.fileno()
print ("文件描述符为: ", fid)
# 关闭文件
fo.close()
以上实例输出结果为:
文件名为: runoob.txt
文件描述符为: 3
os.listdir() 方法:
os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
语法:
listdir()方法语法格式如下:
os.listdir(path)
参数:
-
path -- 需要列出的目录路径
返回值:
返回指定路径下的文件和文件夹列表。
示例:
import os, sys
# 打开文件
path = "D:\AllProjects\LatexProject"
dirs = os.listdir( path )
# 输出所有文件和文件夹
for file in dirs:
print(file)
3.11分栏.aux
3.11分栏.log
3.11分栏.pdf
3.11分栏.synctex.gz
3.11分栏.tex
3.13.2断词.aux
3.13.2断词.log
3.13.2断词.pdf
3.13.2断词.synctex.gz
3.13.2断词.tex
3.5.4摘要.tex
3.6.2大纲与章节.aux
3.6.2大纲与章节.lof
3.6.2大纲与章节.log
3.6.2大纲与章节.lot
3.6.2大纲与章节.out
3.6.2大纲与章节.pdf
3.6.2大纲与章节.synctex.gz
3.6.2大纲与章节.tex
3.6.2大纲与章节.toc
3.8.3表格.aux
3.8.3表格.log
3.8.3表格.pdf
3.8.3表格.tex
3.9页面设置.aux
3.9页面设置.log
3.9页面设置.pdf
3.9页面设置.synctex.gz
3.9页面设置.tex
3.9页面设置2.aux
3.9页面设置2.log
3.9页面设置2.pdf
3.9页面设置2.synctex.gz
3.9页面设置2.tex
3.9页面设置3.aux
3.9页面设置3.lof
3.9页面设置3.log
3.9页面设置3.lot
3.9页面设置3.out
3.9页面设置3.pdf
3.9页面设置3.tex
3.9页面设置3.toc
4数学排版.aux
os.path.isdir()和os.path.isfile()方法:
- 特点:判断一个目标路径是不是文件夹,返回值是True或False
import os
path = "/home/shuan/PycharmProjects/python_file_open/file_open.text"
print(os.path.isdir(path))
print(os.path.isfile(path))
path = "/home/shuan/PycharmProjects/python_file_open/"
print(os.path.isdir(path))
print(os.path.isfile(path))
False
True
True
False
split():
描述:
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
语法:
str.split(str="", num=string.count(str)).
参数:
- str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。
- num -- 分割次数。默认为 -1, 即分隔所有。
返回值:
返回分割后的字符串列表。
示例:
str = '/home/wangying/projects/action_representations-master/Experiments'
abs_pos = str.split('/')
print(abs_pos)
['', 'home', 'wangying', 'projects', 'action_representations-master', 'Experiments']
abs_pos = str.split('/')[1:]
print(abs_pos)
['home', 'wangying', 'projects', 'action_representations-master', 'Experiments']
importlib.import_module():
背景
- 一个函数运行需要根据不同项目的配置,动态导入对应的配置文件运行。
- 文件结构
a #文件夹
│a.py
│__init__.py
b #文件夹
│b.py
│__init__.py
├─c#文件夹
│c.py
│__init__.py
# c.py 中内容
args = {'a':1}
class C:
def c(self):
pass
- 目的
向a模块中导入c.py 中的对象
-
解决方案
a.py
import importlib
params = importlib.import_module('b.c.c') #绝对导入
params_ = importlib.import_module('.c.c',package='b') #相对导入
# 对象中取出需要的对象
params.args #取出变量
params.C #取出class C
params.C.c #取出class C 中的c 方法
getattr():
描述
getattr() 函数用于返回一个对象属性值。
语法
getattr(object, name[, default])
参数
- object -- 对象。
- name -- 字符串,对象属性。
- default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
返回值
返回对象属性值。
示例:
>>>class A(object):
... bar = 1
...
>>> a = A()
>>> getattr(a, 'bar') # 获取属性 bar 值
1
>>> getattr(a, 'bar2') # 属性 bar2 不存在,触发异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'A' object has no attribute 'bar2'
>>> getattr(a, 'bar2', 3) # 属性 bar2 不存在,但设置了默认值
3
>>>
>>> class A(object):
... def set(self, a, b):
... x = a
... a = b
... b = x
... print a, b
...
>>> a = A()
>>> c = getattr(a, 'set')
>>> c(a='1', b='2')
2 1
>>>
hasattr() 函数:
描述
hasattr() 函数用于判断对象是否包含对应的属性。
语法
hasattr(object, name)
参数
- object -- 对象。
- name -- 字符串,属性名。
返回值
如果对象有该属性返回 True,否则返回 False。
实例
class Coordinate:
x = 10
y = -5
z = 0
point1 = Coordinate()
print(hasattr(point1, 'x'))
print(hasattr(point1, 'y'))
print(hasattr(point1, 'z'))
print(hasattr(point1, 'no')) # 没有该属性
输出结果:
True
True
True
False
NumPy IO
Numpy 可以读写磁盘上的文本数据或二进制数据。
NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。
npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。
常用的 IO 函数有:
- load() 和 save() 函数是读写文件数组数据的两个主要函数,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npy 的文件中。
- savez() 函数用于将多个数组写入文件,默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为 .npz 的文件中。
- loadtxt() 和 savetxt() 函数处理正常的文本文件(.txt 等)
numpy.save():
numpy.save() 函数将数组保存到以 .npy 为扩展名的文件中。
numpy.save(file, arr, allow_pickle=True, fix_imports=True)
参数说明:
- file:要保存的文件,扩展名为 .npy,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上。
- arr: 要保存的数组
- allow_pickle: 可选,布尔值,允许使用 Python pickles 保存对象数组,Python 中的 pickle 用于在保存到磁盘文件或从磁盘文件读取之前,对对象进行序列化和反序列化。
- fix_imports: 可选,为了方便 Pyhton2 中读取 Python3 保存的数据。
import numpy as np
a = np.array([1,2,3,4,5])
# 保存到 outfile.npy 文件上
np.save('outfile.npy',a)
# 保存到 outfile2.npy 文件上,如果文件路径末尾没有扩展名 .npy,该扩展名会被自动加上
np.save('outfile2',a)
我们可以查看文件内容:
$ cat outfile.npy
?NUMPYv{'descr': '<i8', 'fortran_order': False, 'shape': (5,), }
$ cat outfile2.npy
?NUMPYv{'descr': '<i8', 'fortran_order': False, 'shape': (5,), }
可以看出文件是乱码的,因为它们是 Numpy 专用的二进制格式后的数据。
numpy.load()
我们可以使用 load() 函数来读取数据就可以正常显示了:
import numpy as np
b = np.load('outfile.npy')
print (b)
输出结果:
[1 2 3 4 5]
any():
描述:any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。元素除了是 0、空、FALSE 外都算 TRUE。
语法:
any(iterable)
参数:
- iterable -- 元组或列表。
返回值:
如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true。
>>>any(['a', 'b', 'c', 'd']) # 列表list,元素都不为空或0
True
>>> any(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素
True
>>> any([0, '', False]) # 列表list,元素全为0,'',false
False
>>> any(('a', 'b', 'c', 'd')) # 元组tuple,元素都不为空或0
True
>>> any(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素
True
>>> any((0, '', False)) # 元组tuple,元素全为0,'',false
False
>>> any([]) # 空列表
False
>>> any(()) # 空元组
False
【pytorch】pytorch中data与item区别:
import torch
x = torch.randn(2,3)
print('[1] ',x)
print('[2] ',x.data)
print('[3] ',x.data[1,1])
print('[4] ',x.data[1,1].item())#与x[1,1].item()相同
print('[5] ',x.data.item())
输出:
由此可以看出,item()的作用是取出一个tensor中的某个元素值,不对向量型的tensor起作用。
【pytorch】named_parameters()和parameters()
nn.Module
nn.Module里面关于参数有两个很重要的属性named_parameters()和parameters(),前者给出网络层的名字和参数的迭代器,而后者仅仅是参数的迭代器。
import torchvision.models as models
model = models.resnet18()
for param in model.named_parameters():
print(param[0])
'''
conv1.weight
bn1.weight
bn1.bias
layer1.0.conv1.weight
layer1.0.bn1.weight
layer1.0.bn1.bias
layer1.0.conv2.weight
layer1.0.bn2.weight
layer1.0.bn2.bias
layer1.1.conv1.weight
layer1.1.bn1.weight
layer1.1.bn1.bias
layer1.1.conv2.weight
layer1.1.bn2.weight
layer1.1.bn2.bias
layer2.0.conv1.weight
layer2.0.bn1.weight
layer2.0.bn1.bias
layer2.0.conv2.weight
layer2.0.bn2.weight
layer2.0.bn2.bias
layer2.0.downsample.0.weight
layer2.0.downsample.1.weight
layer2.0.downsample.1.bias
layer2.1.conv1.weight
layer2.1.bn1.weight
layer2.1.bn1.bias
layer2.1.conv2.weight
layer2.1.bn2.weight
layer2.1.bn2.bias
layer3.0.conv1.weight
layer3.0.bn1.weight
layer3.0.bn1.bias
layer3.0.conv2.weight
layer3.0.bn2.weight
layer3.0.bn2.bias
layer3.0.downsample.0.weight
layer3.0.downsample.1.weight
layer3.0.downsample.1.bias
layer3.1.conv1.weight
layer3.1.bn1.weight
layer3.1.bn1.bias
layer3.1.conv2.weight
layer3.1.bn2.weight
layer3.1.bn2.bias
layer4.0.conv1.weight
layer4.0.bn1.weight
layer4.0.bn1.bias
layer4.0.conv2.weight
layer4.0.bn2.weight
layer4.0.bn2.bias
layer4.0.downsample.0.weight
layer4.0.downsample.1.weight
layer4.0.downsample.1.bias
layer4.1.conv1.weight
layer4.1.bn1.weight
layer4.1.bn1.bias
layer4.1.conv2.weight
layer4.1.bn2.weight
layer4.1.bn2.bias
fc.weight
fc.bias
'''
List list()方法:
描述:list() 方法用于将元组转换为列表。
注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
语法:
list( tup )
参数:
- tup -- 要转换为列表的元组。
返回值:
返回列表。
实例:
aTuple = (123, 'xyz', 'zara', 'abc');
aList = list(aTuple)
print("列表元素 : ", aList)
列表元素 : [123, 'xyz', 'zara', 'abc']
itertools.product():
product
用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即:
product(A, B)
和 ((x,y) for x in A for y in B)的效果是一样的。
使用形式如下:
itertools.product(*iterables, repeat=1)
iterables 是可迭代对象, repeat指定 iterable 重复几次,即:
product(A,repeat=3)等价于product(A,A,A)
from itertools import product as product
A = [1, 2, 3]
B = [100, 200, 300]
for item in product(A, B):
print(item)
(1, 100)
(1, 200)
(1, 300)
(2, 100)
(2, 200)
(2, 300)
(3, 100)
(3, 200)
(3, 300)
for item in product(A, repeat=3):
print(item)
(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
(1, 2, 1)
(1, 2, 2)
(1, 2, 3)
(1, 3, 1)
(1, 3, 2)
(1, 3, 3)
(2, 1, 1)
(2, 1, 2)
(2, 1, 3)
(2, 2, 1)
(2, 2, 2)
(2, 2, 3)
(2, 3, 1)
(2, 3, 2)
(2, 3, 3)
(3, 1, 1)
(3, 1, 2)
(3, 1, 3)
(3, 2, 1)
(3, 2, 2)
(3, 2, 3)
(3, 3, 1)
(3, 3, 2)
(3, 3, 3)
torch.from_numpy():
把数组转换成张量,且二者共享内存,对张量进行修改比如重新赋值,那么原始数组也会相应发生改变。
import torch
import numpy
a = numpy.array([1, 2, 3])
t = torch.from_numpy(a)
print(t) # tensor([1, 2, 3], dtype=torch.int32)
t[0]=-1
print(t) # tensor([-1, 2, 3], dtype=torch.int32)
print(a) # [-1 2 3]