1. os.path.abspath 查看当前文件所在的目录
import os
print(os.path.abspath('.'))
2. os.walk 查看文件夹下的 子目录 和 子文件
import os
dir = os.path.join(os.path.abspath('.'), 'example')
for root, dirs, files in os.walk(dir):
print('本目录:', root)
print('子目录:', dirs)
print('子文件:', files)
print()
本目录: /Users/shuai/Desktop/DOTA_devkit/example
子目录: ['images', 'labelTxt']
子文件: ['.DS_Store']
本目录: /Users/shuai/Desktop/DOTA_devkit/example/images
子目录: []
子文件: ['P1234.png', 'P0706.png', 'P1888.png', 'P0770.png', 'P2598.png', 'P1088.png', 'P2709.png']
本目录: /Users/shuai/Desktop/DOTA_devkit/example/labelTxt
子目录: []
子文件: ['P1888.txt', 'P0770.txt', 'P2598.txt', 'P1234.txt', 'P0706.txt', 'P2709.txt', 'P1088.txt']
可以看出得到是 相对路径,如果想要得到 绝对路径,使用 os.path.join()
3. os.path.splitext 分割文件扩展名
Split a path in root and extension 把 path 分成 根目录 和 扩展 extension
- extension 从 path 中最后一个点开始 到 末尾
- root 点之前的部分
filepath = '/Users/shuai/Desktop/DOTA_devkit/example/images/P1234.png'
print(os.path.splitext(filepath))
extension = os.path.splitext(filepath)[1][1:] # 第2个str,从第2个字符substring
print(extension)
('/Users/shuai/Desktop/DOTA_devkit/example/images/P1234', '.png')
png
4. 从根目录获取其下的 特定类型的文件 并添加绝对路径
import os
# 从根目录获取其下的特定类型的文件
def GetFileFromThisRootDir(dir, ext=None):
allfiles = []
needExtFilter = (ext != None) # 扩展名限定了文件类型,如 png
# os.walk 生成三元组 root, dirs, files
# root: 本dirpath (string)
# dirs: root下的子目录path (list)
# files: root下的子文件path (list)
for root, dirs, files in os.walk(dir):
for filespath in files:
filepath = os.path.join(root, filespath) # 子文件绝对路径
extension = os.path.splitext(filepath)[1][1:] # 子文件扩展名
if needExtFilter and extension in ext: # 如果文件有扩展名要求,并且是ext数组中要求的扩展
allfiles.append(filepath) # 添加这个文件
elif not needExtFilter: # 如果不需要扩展名限制文件类型
allfiles.append(filepath) # 添加
return allfiles
dir = 'example'
for f in GetFileFromThisRootDir(dir, ext=['png']):
print(f)
example/images/P1234.png
example/images/P0706.png
example/images/P1888.png
example/images/P0770.png
example/images/P2598.png
example/images/P1088.png
example/images/P2709.png
example/images/testdir/2.png
example/images/testdir/1.png
5. os.path.basename 返回文件path的最后一个名字
import os
filepath = '/Users/shuai/Desktop/DOTA_devkit/example/images/P0706.png'
print(os.path.basename(filepath))
P0706.png
6. defaultdict
原文 - Python 3 collections.defaultdict() 与 dict的使用和区别
dict subclass that calls a factory function to supply missing values。
defaultdict 属于内建函数dict的一个子类,调用工厂函数提供缺失的值。
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
# defaultdict
d = collections.defaultdict(list)
for k, v in s:
d[k].append(v) # append 是 list 类型的方法
# Use dict and setdefault
g = {}
for k, v in s:
g.setdefault(k, []).append(v) # 先设置默认的v为 [] 类型
# Use dict
e = {}
for k, v in s:
e[k] = v
print(d.items())
print(g.items())
print(e.items())
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])
dict_items([('yellow', 3), ('blue', 4), ('red', 1)])
可以看出 defaultdict
通过设置 default_factory
为 list 的方法将同一 k 值的 v 存入了一个 list 中。
另一个例子,改变了数据。
import collections
s = [('yellow', 1), ('blue', 2), ('yellow', 1), ('blue', 4), ('red', 1)]
# defaultdict
d = collections.defaultdict(list)
for k, v in s:
d[k].append(v)
e = collections.defaultdict(set)
for k, v in s:
e[k].add(v)
print(d)
print(e)
defaultdict(, {'yellow': [1, 1], 'blue': [2, 4], 'red': [1]})
defaultdict(, {'yellow': {1}, 'blue': {2, 4}, 'red': {1}})
7. &= 集合求交集
a = {1, 2}
b = {2, 3}
a &= b
print(a)
{2}