欢迎访问我的博客首页。
1. 文件命名
有 n 个文件需要以十进制命名:从 0 开始且 n ≥ 2 n \geq 2 n≥2 时,补 0 需指定名称长度为 n1 = math.ceil(math.log(n, 10));从 1 开始且 n ≥ 1 n \geq 1 n≥1 时,补 0 需指定名称长度为 n2 = math.ceil(math.log(n + 1, 10))。注意函数 ceil 返回的是浮点数。
使用 time 可以获取精确到秒的时间戳,使用 datetime 可以获取精确到微秒( 1 0 − 6 10^{-6} 10−6 秒)的时间戳。
name = time.strftime('%Y%m%d_%H%M%S', time.localtime())
name = datetime.datetime.now().strftime('%Y%m%d_%H%M%S_%f')
2. 读取和修改 xml 文件
import os
import xml.etree.ElementTree as ET
def read_xml(item, key):
xml_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'globalCfg.xml'))
try:
root = ET.parse(xml_path).getroot()
text = root.findall(item)[0].find(key).text
except Exception:
raise RuntimeError('Failed to find label in xml!')
text = text.strip()
# 1.列表或字典
if text[0] == '[' or text[0] == '{':
return eval(text)
# 2.数字和字符串
try:
text = int(text)
except Exception:
pass
return text
def write_xml(item, key, value):
xml_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'globalCfg.xml'))
try:
tree = ET.parse(xml_path)
root = tree.getroot()
root.findall(item)[0].find(key).text = str(value)
tree.write(xml_path, encoding='utf-8', xml_declaration=True)
return 0
except Exception as ex:
print(ex)
return 1
if __name__ == '__main__':
res = read_xml('person2', 'age')
print(res)
red = write_xml('person1', 'age', 21)
print(red)
这两个函数用于读取和修改 xml 文件中的值,不能创建 xml 文件,也不能在已存在的 xml 文件内添加新标签。读取和修改的 xml 文件必须是下面的形式:
<example>
<person1>
<name>xiaoming</name>
<sex>male</sex>
<age>21</age>
</person1>
<person2>
<name>xiaofang</name>
<sex>female</sex>
<age>19</age>
</person2>
</example>
3. 时间间隔
统计一段时间有多长,精确到微秒。
import time
import datetime
if __name__ == '__main__':
time_start = datetime.datetime.now()
time.sleep(3.21)
time_end = datetime.datetime.now()
# 统计时间间隔。
time_delay = time_end - time_start
print(time_delay) # 时:分:浮点秒
print(time_delay.total_seconds()) # 浮点秒
print(time_delay.seconds) # 秒的整数部分
print(time_delay.microseconds) # 秒的小数部分
4. 搜索文件
os.listdir(path) 用于获取一个文件夹中的文件夹名或文件名。需要注意的是,它不能递归搜索,且获取的是文件名而不是文件路径。下面的函数可以递归地获取指定类型的文件路径:
def list_dir(path: str, ext: list = None) -> list:
candidates = os.listdir(path)
results = list()
if ext:
# 搜索指定类型的文件。
ext = [i.lower() for i in ext]
for fi in candidates:
if os.path.splitext(fi)[1].lower() in ext:
results.append(os.path.join(path, fi))
else:
# 搜索文件夹。
for directory in candidates:
path_one = os.path.join(path, directory)
if os.path.isdir(path_one):
results.append(path_one)
return results
def walk_dir(path: str, ext: list = None) -> list:
results = list()
if ext:
# 搜索指定类型的文件。
ext = [i.lower() for i in ext]
for r, _, fs in os.walk(path):
for fi in fs:
if os.path.splitext(fi)[1].lower() in ext:
path_file = os.path.join(r, fi)
results.append(path_file)
else:
# 搜索文件夹。
for r, ds, _ in os.walk(path):
for di in ds:
path_one = os.path.join(r, di)
if os.path.isdir(path_one):
results.append(path_one)
return results
5. 参考
- os.walk 详解,CSDN,2022。