os, defaultdict,

1. os.path.abspath 查看当前文件所在的目录

import os

print(os.path.abspath('.'))

2. os.walk 查看文件夹下的 子目录 和 子文件

os, defaultdict,_第1张图片
路径
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. 从根目录获取其下的 特定类型的文件 并添加绝对路径

os, defaultdict,_第2张图片
路径
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}

你可能感兴趣的:(os, defaultdict,)