目的:读取文件夹内的100+篇 txt 文件内容,按要求写入到目标文件中
场景
- 所在的公司每天都要发布工作日报,到现在已经积累了约155篇
日志格式:
【iOS-xxxx】日报(6月19日)周一
一、工作计划
1、项目 xxx v1.4.0 (发布时间2018年07月10日)
二、今日工作:
1、fix bug (1个)
2、优化xxx
3、演示xxx demo
三、明日计划:
1、需求分析 xxx
2、预研xxx
- 基于简单的日报格式,结合自身硬件条件,平时会选择 Mac 的备忘录作为记录工具,其优点是:自带软件、多端同步、可跨端复制粘贴等
解决
- 借助 Exporter 这款免费软件,把苹果电脑 Mac OS X 系统自带的备忘录 Notes.app 里的笔记全都导出。
启动后按照提示点击箭头,选择内容导出后的储存位置,然后就一切自动完成了,速度非常快。最终结果是一个大文件夹里的 N 多个 .txt 文本文件,每个文件名都是对应的那条笔记的标题,内容则是笔记正文,文件的创建时间是那条笔记的创建时间(对,不是导出时间)。
Exporter 在苹果 Mac App Store 应用商店的下载地址:https://itunes.apple.com/cn/app/exporter/id1099120373?mt=12
- 编写代码:
import os
from_dir = "/Users/jacob/Desktop/xxx/工作日志记录" #文件夹目录
target_file_path = "/Users/jacob/Desktop/xxx/test.txt"
def filetime(file):
stat_file = os.stat(from_dir + "/" + file)
last_access_time = stat_file.st_mtime
return last_access_time
# 获取 from_dir 文件夹下所有文件名
files = os.listdir(from_dir)
# 排序按修改时间排序文件名称
files = sorted(files,key=lambda x:filetime(x),reverse=True)
# # 打印 from_dir 里的文件名
# print(files)
# 遍历文件名称列表
for filename in files:
# 判断是否是文件夹,不是文件夹才打开
if not os.path.isdir(filename) and filename.endswith(".txt"): # 排除 Mac.os中的.DS_stroe 隐藏文件
# 拼接获取文件绝对路径
f_path = from_dir + "/" + filename
# 读取文件,将内容写入到目标文件
# with open(f_path, "r", encoding="utf-8", errors='replace') as from_file, open(target_file_path, "w", encoding="utf-8", errors='replace') as to_file:
with open(f_path) as from_file, open(target_file_path, "a") as to_file:
# 获得读取内容
from_contents = from_file.read()
# 拼接文件夹名 内容 和 换行
from_contents = filename + "\n" + from_contents + "\n\n" + ("-" * 30) + "\n\n\n"
# 将内容写入到目标文件中
to_file.write(from_contents)
print("完了完了")
上述代码注意点:
- 通过 with 语句打开文件,减少 close 调用
- 文件权限的使用
- 注意 Mac 隐藏文件导致的读取失败(.DS_stroe)
总结
虽然需求很简单,但从刚学习 python 的角度来看,自己对很多的方法或功能的调用并不熟练,这些都是需要通过实践练习才能获得的技能。所以后续自己会多点从实际场景方面去学习 Python 和 使用 Python。
ps:多谢你的阅读,希望对你有所帮助。
网友评论