python xy 3_python(3):文件操作/os库
文件基本操作
r,以读模式打开, r+=r+w,
w, 写模式(清空原来的内容), w+=w+r,
a , 追加模式, a+=a+r,
rb, wb, ab, b表示以二进制文件打开
想在一段文字的中间添加内容, 则用 r+
文件函数:
f.read(), 读取全部; f.read(size)表示size个字节的数据 , 返回字符串
f.write(), 没有writeline函数
f.readline()读取一行,
f.readlines() 读取多行, 形成一个list
f.writelines()
f.close()
f.seek() 控制指针, seek(offset, whence=0)
whence=0 文件头部, 1表示当前位置, 2表示文件尾部; 默认为0
f.seek(50,1) 表示指针往后移动50个字节
实例1:
txt的原文如下:
12345678
I cant
I am home.
#f=open(r'C:\Users\xuyin\Desktop\test\wordcnt.txt','r') 这种也对
f=open('C:\\Users\\xuyin\\Desktop\\test\\wordcnt.txt','r')print(f.read()) #全部读取
f.seek(0,0) #回到初始位置
print(f.read(4)) #读前4个字符, 包括标点 1234
print(f.readline()) #上一行代码结果接下去这一行 5678
print(f.tell()) #10 当前的位置 \n 也算入的
f.close() #关闭文件
上述f=open() 的方法少用, 一般常用with open() as f: 用了这个不用写f.close()了
实例2: 读取文件内容/增加文件内容
现在桌面上有个txt 内容如下
with open(r'C:\Users\xuyin\Desktop\test\aaa.txt','r')as f:
x1=f.read() #得到一个字符串
print(type(x1))print(x1)
f.seek(0,0)print(1)
x2=f.readline()#得到第一行,形成字符串
print(type(x2))print(x2)#f.seek(0,0),没有这行则读取剩下的全部行
print(f.readlines()) #得到一个列表,每行作为一个元素
得到
what do you like?
both123
thank you
1
what do you like?
['both123\n', 'thank yousee you!']
with open(r'C:\Users\xuyin\Desktop\test\aaa.txt','w+')as f:
f.write('what do you like?\nboth')#清空原来的重新写
f.writelines('123\n')#接着写,
f.writelines('thank you')
f.seek(0,0)print(1)print(f.read())
1
what do you like?
both123
thank you
#从末尾开始写:
with open(r'C:\Users\xuyin\Desktop\test\aaa.txt','a+')as f:
f.write('see you!')
f.seek(0,0)print(f.read())
what do you like?
both123
thank yousee you!
实例3:将文件try1 中的字符串加上序号1,2,3写道try2中
代码
with open(r'C:\Users\xuying_fall\Desktop\test\try1.txt','r') as f1:
str1=f1.readlines()for i inrange(0,len(str1)):
str1[i]=str(i+1)+''+str1[i] # str()函数把数值转为字符串!
with open(r'C:\Users\xuying_fall\Desktop\test\try2.txt','w') as f2:
f2.writelines(str1)
注意事项:
with open(r'C:\Users\xuying_fall\Desktop\test\try2.txt','r+') as f3:
f3.write('winter')
winter 覆盖了原来的文件头部, 不是插入!
实例4: 合并文件内容已知桌面的两个文件 tell.txt 和mail.txt, 现在需要合并他们, 新建一个txt ,有三列数据!!
f1=open(r'C:\Users\xuyin\Desktop\test\tell.txt','r')
f1.readline()#跳过第一行
line1=f1.readlines()
f2=open(r'C:\Users\xuyin\Desktop\test\mail.txt','r')
f2.readline()#跳过第一行
line2 =f2.readlines()
name1=[] #新列表 用于存储
tel1=[]
name2=[]
mail2=[]for line inline1:
elements=line.split()
name1.append(str(elements[0]))
tel1.append(str(elements[1]))for line inline2:
elements=line.split()
name2.append(str(elements[0]))
mail2.append(str(elements[1]))
lines=[] #生成新数据
lines.append('姓名\ttelephone\tmailbox\n')for i inrange(len(name1)):
s=''
if name1[i] inname2:
j=name2.index(name1[i]) #name1[i]在name2中的下标
s='\t'.join([name1[i],tel1[i],mail2[j]])
s=s+'\n'
else:
s='\t'.join([name1[i],tel1[i],str('---')])
s= s + '\n'lines.append(s)print(1)#处理name2 中剩下的信息不全的(没有)
for i inrange(len(name2)):
s=''
if name2[i] not inname1:
s= '\t'.join([name2[i], str('---'), mail2[i]])
s= s + '\n'lines.append(s)#写入新文件中
f3=open(r'C:\Users\xuyin\Desktop\test\info_telmail.txt', 'w')
f3.writelines(lines)
f1.close()
f2.close()
f3.close()
结果
实例6:利用字典实现wordcnt.txt文件中的词频统计, 文件内容如下
hello. do you like holiday?
you can do it.
you will join me later.
需要统计文件中的每个单词出现频数
#(三)利用字典实现词频统计
defprocess(line,wordcnt):
line=replacepunctuations(line) #用空格代替标点
words=line.split()for i in words: #从每一行获取每一个字母
if i inwordcnt:
wordcnt[i]+=1
else:
wordcnt[i]=1 #新增一项该词汇
defreplacepunctuations(line):for ch in line: #遍历每一个单词
if ch in '~?@#$,.[]{}'"":
line=line.replace(ch,' ')returnline
f=open(r'C:\Users\xuying_fall\Desktop\test\wordcnt.txt','r') #只读模式打开文件
wordcnt={} #新建一个字典
for line in f: #遍历每一个行
process(line.lower(),wordcnt) #全部小写, 不区分大小写了
pairs=list(wordcnt.items()) #列表化
print(pairs)
items=[(x,y) for (y,x) in pairs] #交换下顺序
items.sort() #根据单词次数从小到大排列
print(items)#[(1, 'can'), (1, 'hello'), (1, 'holiday'), (1, 'it'), (1, 'join'), (1, 'later'),
# (1, 'like'), (1, 'me'), (1, 'will'), (2, 'do'), (3, 'you')]
(二)os module 应用
#改变某个文件下的所有文件的文件名
importosimport time #用于计算运行时间#'连接符'.join(list) 将列表组成字符串
defchange_name(path):global i #用于统计处理的文件个数
if not os.path.isdir(path) and notos.path.isfile(path):#检查给出的路径是否为一个文件或者目录
returnFalseifos.path.isfile(path):print(222)
file_path= os.path.split(path) #分割出目录名与文件名
lists = file_path[1].split('.') #分割出文件名称与文件的扩展名
file_ext = lists[-1] #取出后缀名(列表切片操作)#print file_ext
txt1=['txt','doc']if file_ext intxt1:#rename(old,new) os.rename(path,file_path[0]+'/'+lists[0]+'_xy.'+file_ext)
new_name=lists[0]print(new_name) #aaa
print(type(new_name)) #
print(len(new_name)) #3
new_name=new_name[0:len(new_name)-1]#删除名字的最后一个字母
new_name=new_name+'xy' #新增两个字符
print (new_name) #aaaxy
os.rename(path,file_path[0]+'/'+new_name+'.'+file_ext)#print type(lists[0])#os.rename(path,file_path[0]+'/'+lists[0]+'_xy.'+file_ext)
i+=1 #统计文件个数
elifos.path.isdir(path):print(111)for x in os.listdir(path):#返回该目录下的所有文件与目录名
print(x)
change_name(os.path.join(path,x))#os.path.join()在路径处理上很有用,用于合并目录
txt_dir= 'C:\\Users\\xuyin\\Desktop\\test\\aaa.txt'txt_dir= txt_dir.replace('\\','/')
start=time.time()
i=0
change_name(txt_dir)
c= time.time() -startprint('程序运行耗时:%0.2f'%(c))print('总共处理了 %s 个文件'%(i))
上述txt_dir = 'C:\\Users\\xuyin\\Desktop\\test\\aaa.txt' 是一个文件, 因此print(222) 运行
若修改为txt_dir = 'C:\\Users\\xuyin\\Desktop\\test' 则是一个文件夹 , 因此print(111) 运行
结果:
程序运行耗时:0.12
总共处理了 10 个文件
文件批量重命名结果如下:
归纳os 常用函数:
得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()
返回指定目录下的所有文件和目录名:os.listdir()
函数用来删除一个文件:os.remove()
删除多个目录:os.removedirs(r“c:\python”)
检验给出的路径是否是一个文件:os.path.isfile()
检验给出的路径是否是一个目录:os.path.isdir()
返回一个路径的目录名和文件名:os.path.split()
os.path.split('/home/swaroop/byte/code/poem.txt')
结果:('/home/swaroop/byte/code', 'poem.txt')
分离扩展名:os.path.splitext()
os.path.splitext('C:\\Users\\xuyin\\Desktop\\test\\aaa.txt')
('C:\\Users\\xuyin\\Desktop\\test\\aaa', '.txt')
获取路径名:os.path.dirname()
获取文件名:os.path.basename()
os.path.dirname('C:\\Users\\xuyin\\Desktop\\test\\aaa.txt')'C:\\Users\\xuyin\\Desktop\\test'os.path.basename('C:\\Users\\xuyin\\Desktop\\test\\aaa.txt')'aaa.txt'
重命名:os.rename(old, new)(上例中已经有了)
os.path.join(x1,x2) :灰常有用!!!
os.path.join('d','dd')
ans:'d\\dd'
os.mkdir("file") 创建目录
os.mkdir('haha'):表示创建一个haha文件夹(在当前目录下)
创建多级目录:os.makedirs(r“c:\python\test”)
os.makedirs('C:\\Users\\xuyin\\Desktop\\hahaa'):在桌面创建hahaa文件夹复制文件:
import shutil
shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件
shutil.copyfile('C:\\Users\\xuyin\\Desktop\\test\\aaa.txt','C:\\Users\\xuyin\\Desktop\\hahaa\\bbb.txt')
#上述操作复制并且rename了
复制文件夹:shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在
shutil.copytree('C:\\Users\\xuyin\\Desktop\\hahaa','C:\\Users\\xuyin\\Desktop\\test1')
#复制hahaa文件夹为test1文件夹
重命名文件(目录)os.rename("oldname","newname") 文件或目录都是使用这条命令移动文件(目录)shutil.move("oldpos","newpos") 删除文件os.remove("file")删除目录os.rmdir("dir")只能删除空目录
shutil.rmtree("dir") 空目录、有内容的目录都可以删
获取文件大小:os.path.getsize(filename)
python xy 3_python(3):文件操作/os库相关推荐
- Python中的File(文件)操作
Python中的File(文件)操作 针对磁盘中的文件的读写.文件I/O I 输入(input) O输出(Output) 文件操作步骤:1.打开文件 2.读写文件 3.关闭文件 写入文件的操作:(把大 ...
- 详解Python中的File(文件)操作
目录 Python中的File(文件)操作 写入文件的操作: 读取文件的操作: 一.文件操作相关函数 1. open() 打开文件 2. seek() 设置文件指针的位置 3. write() 写入内 ...
- python 文件操作 os模块和shutil模块
转载自:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html ############################## ...
- Python十大常用文件操作
日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...
- 【Python】用于在 Python 中处理 PDF 文件的 PyPDF2 库
作者 | megha152 编译 | Flin 来源 | analyticsvidhya 介绍 PDF 代表便携式文档格式.它使用 .pdf 扩展名.这种类型的文件主要用于共享目的.它们不能被修改,从 ...
- python删除txt文件第三行_真香!Python十大常用文件操作,轻松办公
日常对于批量处理文件的需求非常多,用Python写脚本可以非常方便地实现,但在这过程中难免会和文件打交道,第一次做会有很多文件的操作无从下手,只能找度娘. 本篇文章整理了10个Python中最常用到的 ...
- python身份证区域分割_python文件操作实战(将数据按照区域进行划分--身份证号...
本篇包括14章内容,系统介绍了Python语言的基础知识.内容包括Python基础语法.数据类型和类型转换.运算符.流程控制(分支结构循环结构).数据结构(列表生成式).函数的定义及使用.异常处理.迭 ...
- Python 开发-2 (文件操作,正则表达式,类,JSON,装饰器,异常处理,Socket)
文章目录 文件操作 递归创建目录 删除文件或目录 拷贝文件 修改文件名或目录名 文件路径名操作 判断文件,目录是否存在 文件大小与修改时间 当前目录与目录切换 遍历目录文件 遍历目录下指定后缀 目录文 ...
- Python基础知识_day10_文件操作_pickle模块_os模块_shutil模块
文章目录 1. 文本文件和二进制文件 2. 创建文件对象 open() 3. 文本文件的写入 3.1 write()/writelines()写入数据 3.2 with语句 4. 文本文件的读取 5. ...
- 第10节:文件操作/os模块/shutil模块/递归算法原理
文章目录 文件 1.文本文件和二进制文件 2.文件操作相关模块概述 3.创建文件对象open() 4.文本文件的写入 编码知识_中文乱码问题解决 write()/whiteline()写入操作 clo ...
最新文章
- MutationObserver 监听DOM树变化
- C和指针之结构体大小和成员变量位置距离结构开始存储的位置偏移字节
- 【华为云实战开发】12.如何在云端快速开展Swagger接口测试
- 地图距离算法_基于权重的地图匹配技术
- Clear Type技术
- MAC 终端git提交代码步骤
- 补码乘法、booth算法、Wallace树
- 一般纳税人税额计算_一般纳税人应纳税额如何计算?
- 最好用的开源免费笔记软件IdeaNote
- Midjourney用户手册中文版详解模型、命令、参数与高级用法
- sap 新手入门第一课(新装SAP IDES必须做的操作)
- 【百度地图API】JS版本的常见问题
- 软考可以不考初级直接考中级吗?
- pandownload复活教程
- SpringBoot实现企业微信上传图片
- VIRTUALBOX 虚拟机安装 OS X 10.9 MAVERICKS
- 生态“群海”:数字化转型的供需之变
- Ultralytics公司YOLOv8来了(训练自己的数据集并基于NVIDIA TensorRT和华为昇腾端到端模型加速)--跟不上“卷“的节奏
- realme双12真我GT大师探索版2499元起,还可1212元买入
- 煽情的儿子227=随笔
热门文章
- 计算机加入域用户名,使用PowerShell重新命名计算机并加入域
- 微信nickname乱码 php,CSV中微信名字乱码 问题
- 树的专项练习(补充)
- 打印机显示服务器脱机是什么原因,脱机使用打印机是什么意思?脱机打印机状态显示错误怎么办...
- idea debug collecting 卡死
- js动态添加HTML css失效,JS动态添加元素和设置其样式问题
- scrapy 使用无忧代理IP 需要填写无忧代理IP提供的API订单号(请到用户中心获取) 这个是要钱吗??...
- 《大连金州没有眼泪》
- [转帖]张汝京:告别中芯国际这10年
- WidsMob Denoise如何使用?WidsMob Denoise图片降噪教程