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 工具,后来那个页面也 ...
随机推荐
- windows下安装Rabbitmq详解
RabbitMQ是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang. 1.什么是Erlang? Erlang(['ə:læŋ])是一种通用的面向并发的编程语言 ...
- 【Linux】添加DNS
1.添加DNS输入命令: vi /etc/resolv.conf 添加一行:nameserver 10.41.132.9 2.查看DNS nslookup 127.0.0.1 | grep Serve ...
- Java的家庭记账本程序(D)
日期:2019.2.8 博客期:031 星期一 今天是把程序的查询功能以列表的形式完成了! 截图如下:
- sench touch 时间插件 扩展
因项目 需要 老项目需要用到 时分 的插件 而本身sencha touch 自己木有这个功能,因此在网上找到了 一个可以扩展的插件. 相关目录复制如下代码: /** * The picke ...
- CentOS 7 防火墙,端口开启命令
1. 查看已打开的端口 # netstat -anp 2. 查看想开的端口是否已开 # firewall-cmd --query-port=8003/tcp 若此提示 FirewallD is ...
- 《剑指offer》从上往下打印二叉树
本题来自<剑指offer> 从上往下打印二叉树 题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 队列的思想. 先将根节点加入,当取该节点时候,依次将左右子树加入,直 ...
- zoj3471 状态压缩dp基础
/* dp[S]表示状态S下的最大收益,0表示没有了,1表示还在 */ #include<bits/stdc++.h> using namespace std; <<],mp[ ...
- bzoj 3529
非常好的一道莫比乌斯反演题,对提升自己的能力有很大帮助. 首先我们分析一下题意:题意让我们求,其中 那么我们首先对后面的式子进行一下变形,变形过程详见https://blog.csdn.net/lle ...
- Linux下source命令详解
source命令用法 source FileName source命令作用 在当前bash环境下读取并执行FileName中的命令. *注:该命令通常用命令“.”来替代. 使用范例: source f ...
- 浅拷贝和深拷贝(谈谈java中的clone)
clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那么在java语言中,有 ...