day9文件操作---从即日起时景丽阳老师给我们讲课
os.walk()递归获取文件,深度优先查找
path = "D:\lmj_work_file\标注数据\Annotation\im"
def get_inner_files(arg):
count_round =
for root, dirs, files in os.walk(arg):
# print("root>>", root, type(root)) # 这里打印的是根目录,因为是递归查找文件夹,所以每次循环的根目录不一样
# print("dirs>>", dirs, type(dirs)) # 这里打印的是root下面的文件目录名称,仅限一级目录下的文件夹名称,返回值是列表
print("list iterable files>>", [os.path.join(root, name)for name in files], "\n") # 打印当前文件路径
print("files>>", files, type(files), "\n") # root下的文件名,返回值是列表
# for i in dirs:
# print("each dir>>>", i)
count_round += 1 # 循环的次数,由嵌套的层级决定。
print(count_round) get_inner_files(path)
执行结果如下:
list iterable files>> ['D:\\lmj_work_file\\标注数据\\Annotation\\im\\15311153701.xml', 'D:\\lmj_work_file\\标注数据\\Annotation\\im\\_1A_2_20170615124904411I.xml'] files>> ['15311153701.xml', '_1A_2_20170615124904411I.xml'] <class 'list'> list iterable files>> ['D:\\lmj_work_file\\标注数据\\Annotation\\im\\新建文件夹\\_1A_1_20170523210544357I.xml'] files>> ['_1A_1_20170523210544357I.xml'] <class 'list'> list iterable files>> ['D:\\lmj_work_file\\标注数据\\Annotation\\im\\新建文件夹\\inner_two\\_1A_2_20170518113348657I.xml'] files>> ['_1A_2_20170518113348657I.xml'] <class 'list'> list iterable files>> ['D:\\lmj_work_file\\标注数据\\Annotation\\im\\新建文件夹\\inner_two\\inner_three\\_1A_2_20170616123652362I.xml'] files>> ['_1A_2_20170616123652362I.xml'] <class 'list'> list iterable files>> ['D:\\lmj_work_file\\标注数据\\Annotation\\im\\新建文件夹 (2)\\_1A_1_20170621180306149I.xml'] files>> ['_1A_1_20170621180306149I.xml'] <class 'list'> 5
先在“新建文件夹”下一层一层找下去,找完之后再返回到根目录下找下一个分支,循环的层数跟文件夹数量保持一致。
文件的操作,读,写,只读只写,或者可读同时可写,追加写,以二进制的方式读,以二进制的方式写,以二进制的方式追加。
思维导图:
给你一个文件路径,从中找出所有的文件,方法如下:
# 方法一:(面试要求不使用os.walk)
def print_directory_contents(sPath):
import os for sChild in os.listdir(sPath):
sChildPath = os.path.join(sPath, sChild)
if os.path.isdir(sChildPath):
print_directory_contents(sChildPath)
else:
print(sChildPath) # 方法二:(使用os.walk)
def print_directory_contents(sPath):
import os
for root, _, filenames in os.walk(sPath):
for filename in filenames:
print(os.path.abspath(os.path.join(root, filename))) print_directory_contents('.')
老师的笔记:
内存 存不长久
硬盘 数据储存的持久化
文件操作 —— 数据持久化储存的一种
全栈开发:框架类 初识文件操作:
#找到文件
#打开文件
#操作:读 写
#关闭
f = open('歌词','w',encoding='utf-8') #f:文件操作符 文件句柄 文件操作对象
f.write('')
f.close()
#open打开文件是依赖了操作系统的提供的途径
#操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
#win gbk mac/linux utf-8 #习惯叫 f file f_obj f_handler fh
# print(f.writable()) #判断文件是否可写
# print(f.readable()) #判断文件是否可读
# f.write('7018201890') #写文件的时候需要写数字,需要把数字转换成字符串
# f.write('aasjgdlwhoojfjdaj')
# f.write('iq349jdsh\n')
# f.write('aks')
# f.write('\nsdgawo') #文件的换行
# f.write('志强德胜') #utf-8 unicode gbk
f.close() #找到文件详解:文件与py的执行文件在相同路径下,直接用文件的名字就可以打开文件
#文件与py的执行文件不在相同路径下,用绝对路径找到文件
#文件的路径,需要用取消转译的方式来表示:1.\\ 2.r''
#如果以写文件的方式打开一个文件,那么不存在的文件会被创建,存在的文件之前的内容会被清空
' \\n'
f = open(r'C:\Users\Administrator\Desktop\s8_tmp.txt','w',encoding='utf-8') #文件路径、操作模式、编码
f.write('哈哈哈')
f.close() #关闭文件详解
#打开文件
# f = open('歌词','r',encoding='utf-8')
f = open('歌词',encoding='utf-8')
#1.读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容
# content = f.read()
# print('read : ',content)
#2.读一部分内容:read(n),指定读n个单位
# print(f.read(5)) #3.读文件的第三种方式:按照行读,每次执行readline就会往下读一行
# content = f.readline() # print('readline : ',content.strip()) #strip去掉空格、制表符、换行符
# content2 = f.readline()
# print(content2.strip()) # print(1) #--> 1\n
# print('1\n') #--> 1\n\n #4.读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表
# content = f.readlines()
# print('readlines : ',content) #5.读:最常用
for l in f:
print(l.strip()) #关闭文件
f.close()
课堂练习:此练习只有后半部分,前半部分需要创建一个文件,里面要存储一些内容,然后用这个练习的方法把内容打印出来,按照一定的格式的方式。
f = open('shoplist',encoding='utf-8') #读文件并整理成需要的数据类型
goods_list = []
for line in f:
if line.strip():
goods_dic = {'name':None,'price':None}
line = line.strip()
goods_lst = line.split()
print(goods_lst)
goods_dic['name'] = goods_lst[0]
goods_dic['price'] = goods_lst[1]
goods_list.append(goods_dic)
print(goods_list)
f.close() f = open('shoplist',encoding='utf-8') #只显示文件中有内容的行
goods_list = []
for line in f:
if line.strip():
print(line.strip())
f.close()
打开文件的方式:
# f = open('歌词','rb')
# f.close()
#b:图片、音乐、视频等任何文件
#传输:上传、下载
#网络编程: #修改文件的编码——非常不重要,不重要程度五颗星
#utf-8 用utf8的方式打开一个文件
#读文件里的内容str
#将读出来的内容转换成gbk
#以gbk的方式打开另一个文件
#写入 #a+
# f = open('shoplist','a+',encoding='utf-8')
# print(f.readable())
# f.write('\ncomputer 6000 5')
# f.write('\ncomputer 6000 5')
# f.write('\ncomputer 6000 5')
# f.write('\ncomputer 6000 5')
# f.close() #1.被动接受知识 - 主动提出问题
#2.主动的找到问题,并且找到对应的解决方法
#3.主动的学习 # r+ 可读可写:
#1.先读后写:写是追写
#2.先写后读:从头开始写
# f = open('歌词','r+',encoding='utf-8')
# # line = f.readline()
# # print(line)
# f.write('0000')
# f.close()
# w+ 可写可读:一上来文件就清空了,
# 尽管可读:1.但是你读出来的内容是你这次打开文件新写入的
# 2.光标在最后,需要主动移动光标才可读
# f = open('歌词','w+',encoding='utf-8')
# f.write('abc\n')
# f.write('及哈哈哈')
# f.seek(0)
# print(f.read())
# f.close()
# a+ 追加可读
# f = open('歌词','a+',encoding='utf-8')
# f.write('\nqq星')
# f.seek(0)
# print(f.read())
# f.close() #一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
#常用的:
#r、w、a
#rb、wb、ab,不需要指定编码了 f = open('歌词','rb')
content = f.read()
f.close()
print(content)
f2 = open('歌词2','wb')
f2.write(content)
f2.close()
文件内的光标操作:
f = open('歌词','r+',encoding='utf-8')
#seek 光标移动到第几个字节的位置
# f.seek(0) 移动到最开始
# f.seek(0,2) 移动到最末尾
f.truncate(3) #从文件开始的位置只保留指定字节的内容
# f.write('我可写了啊')
#tell 告诉我光标在第几个字节
#seek移动光标到指定位置
# content = f.readline()
# print(content.strip())
#tell告诉你当前光标所在的位置
# print(f.tell())
# f.seek(4) #光标移动到三个字节的地方‘\r\n’
# content = f.read(1) #读一个字符
# print('***',content,'***')
# content = f.readline()
# print(content.strip())
# print(f.tell())
f.close() #tell
#seek:去最开始、去最结尾
#truncate:保留n个字节 #文件的修改
#文件的删除 #购物车的商品都写在文件里,完成文件的解析之后再写购物车作业
如下是课堂内容的截图:
绝对路径就是文件的保存路径,查找方法就是点击该文件然后点击右键,点击属性即可查到。
一个\n回车键占两个单位,一个单位是一个字符
f=open('shoplist',encoding'utf-8')这一句中没有r,也没有w,因为如果不写‘r,w’默认就是‘读’
下图中的if line.strip():这句话翻译过来就是:line.strip()如果字符串就是空的,那么就等于False,if False是不成立的,不会打印。如果文件中有空格的时候这句话的作用就是遇到空格直接掠过,不读取该空格。
day9文件操作---从即日起时景丽阳老师给我们讲课的更多相关文章
- 【学习笔记】--- 老男孩学Python,day9, 文件操作
有 + 就是有光标,注意光标位置 不同模式打开文件的完全列表: http://www.runoob.com/python/python-files-io.html 模式 描述 r 以只读方式打开文件 ...
- day9 python之文件操作
1.文件操作 1.1 基本模式 # 格式 f = open("相对路径/绝对路径",mode = "模式",encoding = "编码级" ...
- day9笔记--文件操作
文件操作 计算机系统分为:计算机硬件,操作系统,应用程序三部分. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用 ...
- 013.Python的文件操作
一 文件操作 fp = open("打开的文件",mode="模式选择",encoding="编码集") open 函数 返回一个文件io对 ...
- UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)
前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
随机推荐
- GIT 版本管理-github&码云
GIT 是什么 git是一个用于帮助用户实现版本控制的软件. 把本地代码push到远程服务器 git add.git commitpush code to remove machine.git pus ...
- swift 学习- 10 -- 类和结构体
// '类和结构体' 是人们构建代码所使用的一种通用且灵活的构造体, 我们可以使用完全相同的语法规则来为 '类和结构体' 定义属性 (变量 和 常量) 和添加方法, 从而扩展 类和结构体 的功能 // ...
- 修改 sql 提示符信息:
Last login: Thu Dec 8 19:18:08 2016 from 192.168.242.1 [root@localhost ~]# su - oracle [oracle@local ...
- Confluence 6 使用 Jira 管理用户
如果你已经使用了 Jira 来管理你的任务和 issue 的话,你可以选择将 Jira 和 Confluence 整合在一起,将用户管理集中到一个地方.你可以控制你 Jira 中的用户组是否具有使用 ...
- 复习os模块常用的一些操作
import os # 1.切换路径============= d = os.getcwd() #获取当前的工作路径 os.chdir('D:\\')#目录的切换 print(os.getcwd()) ...
- 基于kali linux无线网络渗透测试
1.无线网络渗透测试目前主要有三种方式,分别是暴力破解PIN码,跑握手包,搭建伪热点三种方式,当然还存在其他的方式. 1.1暴力破解 路由器的PIN码由八位0-9的数字组成,PIN码由散步风组成,前四 ...
- django----Form详细信息
Form类: 创建Form类时,主要涉及到 [字段] 和 [插件],字段用于对用户请求数据的验证,插件用于自动生成HTML; Django内置字段 Field required=True, 是否允许为 ...
- 解决npm install过程中报错:unable to verify the first certificate
今天使用npm安装开发包时遇到“unable to verify the first certificate”(无法验证第一证书)这个问题 原因:2014年2月27日,npm不再支持自签名证书.因为n ...
- codeforce 240E 最小树形图+路径记录更新
最小树形图的路径是在不断建立新图的过程中更新的,因此需要开一个结构体cancle记录那些被更新的边,保存可能会被取消的边和边在旧图中的id 在朱刘算法最后添加了一个从后往前遍历新建边的循环,这可以理解 ...
- C++ Primer 笔记——数组
1.数组的大小是固定不变的,声明时必须指定大小(或者使用列表初始化),而且大小必须大于0,C++ Primer里面也建议,如果不确定元素的个数,请使用vector. ]; , , }; //数组长度固 ...