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()) #得到一个列表,每行作为一个元素
得到<class 'str'>what do you like?both123thank you1<class 'str'>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())
1what do you like?both123thank 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?both123thank 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 in range(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 in line1:elements=line.split()name1.append(str(elements[0]))tel1.append(str(elements[1])) for line in line2:elements=line.split()name2.append(str(elements[0]))mail2.append(str(elements[1]))lines=[] # 生成新数据 lines.append('姓名\ttelephone\tmailbox\n')for i in range(len(name1)):s=''if name1[i] in name2: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 in range(len(name2)):s=''if name2[i] not in name1: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.
需要统计文件中的每个单词出现频数
# (三)利用字典实现词频统计 def process(line,wordcnt):line=replacepunctuations(line) # 用空格代替标点words=line.split()for i in words: # 从每一行获取每一个字母if i in wordcnt:wordcnt[i]+=1else:wordcnt[i]=1 # 新增一项该词汇 def replacepunctuations(line):for ch in line: # 遍历每一个单词if ch in '~?@#$,.[]{}'"":line=line.replace(ch,' ')return linef=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 应用
#改变某个文件下的所有文件的文件名 import os import time #用于计算运行时间 #'连接符'.join(list) 将列表组成字符串 def change_name(path):global i #用于统计处理的文件个数if not os.path.isdir(path) and not os.path.isfile(path):#检查给出的路径是否为一个文件或者目录return Falseif os.path.isfile(path):print(222)file_path = os.path.split(path) #分割出目录名与文件名lists = file_path[1].split('.') #分割出文件名称与文件的扩展名file_ext = lists[-1] #取出后缀名(列表切片操作) # print file_exttxt1=['txt','doc']if file_ext in txt1:#rename(old,new) os.rename(path,file_path[0]+'/'+lists[0]+'_xy.'+file_ext)new_name=lists[0]print(new_name) # aaaprint(type(new_name)) # <class 'str'>print(len(new_name)) #3new_name=new_name[0:len(new_name)-1]#删除名字的最后一个字母 new_name=new_name+'xy' # 新增两个字符print (new_name) # aaaxyos.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 #统计文件个数elif os.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() - start print('程序运行耗时:%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)
转载于:https://www.cnblogs.com/xuying-fall/p/8193646.html
python(3):文件操作/os库相关推荐
- python的文件操作、模块操作、os模块、time、datatime模块以及模块的制作
Day12新手小白学python 第十二节 python的文件操作.模块操作.os模块.time.datatime模块以及模块的制作 目录 Day12新手小白学python 前言 一.文件打开关闭 二 ...
- Python之文件操作_读取_编码_os模块
目录 前言 一.文件基本操作 1.什么是文件 2.操作文件的步骤 3.文件的路径 4.open函数操作权限总结 5.文件读取 6.with-open-as 7.文件定位读取 8.文件编码 二.OS模块 ...
- Python基础-文件操作
Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...
- python写文件追加 按行追加_你真的会用python进行文件操作吗
本篇文章主要比较系统的介绍了python中文件操作,以及在在使用中需要注意的问题. 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非易失性存储器中实现持续性存储, ...
- 15 python的文件操作
一.文件打开 文件(file) 通过Python程序来对计算机中的各种文件进行增删改查的操作,文件也叫I/O(Input/Output) 文件的操作步骤 打开文件 对文件进行各种操作(读.写)然后保存 ...
- python通过内置的什么函数打开一个文件_利用python进行文件操作
这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...
- python对文件操作-python中文件操作的其他方法
Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open("poems" ...
- python︱批量操作文件(os)、图片操作技巧(下载网络图片、skimage.io)
文章目录 @[toc] . 一.遍历操作文件 1.文件名字获取 **注意,不能`import glob` ,不然就会报错:** 2.批量重命名文件os.rename 直接修改了上级目录,test2.t ...
- fliecmp库:Python比较文件操作
目录 前言 生成示例文件 cmp()(比较文件) cmpfiles()(比较一组文件) dircmp()(比较目录) left_list与right_list 忽略部分文件进行对比 其他属性 前言 对 ...
- Python(10)文件操作(IO 技术)、OS模块、递归
文章目录 文件操作(IO 技术) 文本文件和二进制文件 文件操作相关模块概述 创建文件对象 open() 基本的文件写入操作 常用编码介绍 ASCII ISO8859-1 GB2312 GBK GB1 ...
最新文章
- linux网络编程学习笔记之三 -----多进程并发服务端
- vim 直接跳转到标签
- hashmap应用场景_工作中常用到的Java集合有哪些?应用场景是什么?
- c语言与64位windows不兼容_微软发布可模拟 64 位 x86 程序的 ARM 版 Windows 10
- Android ContentProvider 使用介绍
- 怎么输入license_误执行了 rm fr /* 之后,除了跑路还能怎么办?!
- 转载python2进制打包相关
- 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
- php微积分难吗,微积分中10大经典问题
- mysql查询编辑器_navicat怎么进入查询编辑器
- ISP Pipeline
- 定点补码加减法运算_定点加减法运算与溢出判断处理
- Navicat Premium 15 注册出现 No All Pattern Found! File Already Patched?
- 冷酷仙境与世界尽头——《葫芦兄弟》人物赏析 作者:马伯庸
- HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型
- Installation failed due to: ‘‘cmd package install-create -r -t --user current --full --dont-kill -t
- ABAP基本数据类型
- 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️词向量模型简介
- 数据库SQL入门学习
- Final Cut Pro V10.6.5 MAC 专属视频后期工具
热门文章
- lbp2900打印机linux驱动下载,佳能LBP2900+驱动下载-佳能LBP2900+打印机驱动下载 V3.30官方版--pc6下载站...
- 无线AP Aruba-515初始化设置
- 1000瓶毒药里有1瓶有毒,问需要多少只老鼠能试出来哪瓶有毒
- 如何获取计算机网络地址,如何查看电脑网卡获取的IP地址是多少?
- empty怎么发音_empty怎么读?empty是什么意思?
- 礼物帮手项目(3) - 传id跳转详情页(尝试2种方法)
- TextView控件的使用(KongJian)
- html向下的箭头符号,向下的箭头符号
- APP开发者如何选择适合的广告联盟或聚合广告平台
- element-ui的confirm里面可一写html