博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python-文件操作
阅读量:6336 次
发布时间:2019-06-22

本文共 4246 字,大约阅读时间需要 14 分钟。

文件操作

 打开文件

f = open('歌词','w',encoding='utf-8')  

# f:文件操作符 文件句柄 文件操作对象

# 习惯叫f file f_obj f_handler fh

 

open打开文件是依赖了操作系统的提供的途径 操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码 win 是gbk编码形式,Mac和Linux是使用的utf-8编码形式
print(f.writable())   #判断文件是否可写print(f.readable())   #判断文件是否可读f.write('123456')   #写文件的时候需要写数字,需要把数字转换成字符串print(f.write('123456'))    #返回值表示占有的字符数,如果带有\n,需要再加1个字节f.write('asdff')f.write('isfgs\n')  #\n 文件的换行f.write('\ndljf')   #\n在后面,表示本次写入完成后,下一次再写入的内容会换行,\n在前面,表示本次写入的内容会在下一行显示
文件处理的步骤: f = open('歌词','w',encoding='utf-8') f.write('46564') f.close() del f #可写可不写
关闭文件详解:操作系统级别的关闭文件资源:f.close() del f 主动释放了一个python程序内存中的变量,可写可不写 找到文件详解:文件与py的执行文件在相同路径下,直接用文件的名字就可以打开文件             文件与py的执行文件不在相同路径下,用绝对路径找到文件 文件的路径:需要用取消转译的方式来表示,有两种形式:r 或\\ 如果以写文件的方式打开一个文件,那么不存在的文件将会被创建,存在的文件之前文件中的内容将会被清空 f = open(r'C:\Users\Administrator\Desktop\a.txt','w',encoding='utf-8') f = open('C:\\Users\\Administrator\\Desktop\\a.txt','w',encoding='utf-8') f.write('哈哈哈') f.close()
打开文件:f = open('歌词','r',encoding='utf-8')1. 读文件的第一种方式:read,用read方法会一次性的读出文件中的所有内容content = f.read()f.close()print(content)2. 读一部分内容:read (n),指定读n个单位(包含转行符)f = open('歌词','r+',encoding='utf-8')content = f.read(2)f.close()print(content)3. 读文件的第三种方式:按照行读,每次执行readline就会往下面再读一行(从上一次读取结束的位置往下读取一行)content = f.readline()f.close()print(content.strip())  #strip去掉空格,制表符,换行符4.读文件的第四种方式:readlines 返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表content = f.readlines()print(content,type(content))      #['wenwen\n', '123\n', 'hello\n', 'das'] 
5.读:最常用for i in f
b:图片,音乐,视频等任何文件,用于传输:上传和下载,在网络编程中会详细讲解 f = open('歌词','rb') content = f.read() print(content) f.close()
  
一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
常用的:r , w  , arb ,wb ,ab不需要指定编码了f = open('歌词','rb')content = f.read()f.close()print(content)f2 = open('歌词2','wb')f2.write(content)f2.close()

 

 
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()seek 光标移动到第几个字节的位置f.seek(0)    #移动到最开始f.seek(0,2)    #移动到最末尾print(f.readline())tell 告诉我光标在第几个字节f = open('歌词','r+',encoding='utf-8')print(f.seek(0,2))print(f.tell())f.truncate(3)seek 移动光标到指定位置(去最开始,去最结尾)truncate:文件中只保留n个字节
 

 

注意:   1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的     2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,         所以truncate要在r+或a或a+等模式下测试效果
购物车
f = open('shoplist',encoding='utf-8')goods_dict = {}for line in f:    line = line.strip()    goods_list = line.split()    goods_dict[goods_list[0]] = goods_list[1:]print(goods_dict,type(goods_dict))f = open('shoplist',encoding='utf-8')goods_list = []for line in f:    goods_dic = {
'name':None,'price':None,'数量':None} line = line.strip() goods_lit = line.split() # print(goods_list) goods_dic['name'] = goods_lit[0] goods_dic['price'] = goods_lit[1] goods_dic['数量'] = goods_lit[2] goods_list.append(goods_dic)print(goods_list)f.close()f = open('shoplist', encoding='utf-8')good_list=[]for line in f: # if line.strip(): #只显示文件中有内容的行 # print(line.strip()) line = line.strip() goods_list = line.split() print(goods_list)f.close()
文件的修改
1.创建一个新文件 2.把原来的文件中的内容读出来 3.操作读出来的字符串,把字符串中的内容替换掉 4.把替换之后的内容写到新文件里 5.删除原文件,新文件重命名成原文件的名字 删除原文件需要以下操作: import os   #os模块 os.remove('原文件')    #删除文件 os.rename('原文件.bak','原文件')  #把新文件重命名为原文件的名字
具体步骤如下:f1 = open('原文件.bak','w',encoding='utf-8')f = open('原文件',encoding='utf-8')old_content = f.read()  #原来的内容\nnew_content = old_content.replace('新','原来')f1.write(new_content)f.close()f1.close()import osos.remove('原文件')os.rename('原文件.bak','原文件')
具体步骤,修改全部
当文件特别大时上面方法就不适用了
当文件特别大时,只改第一个要修改的内容

 with操作

with open('原文件',encoding='utf-8') as f:    content = f.read()    print(content)with open('原文件',encoding='utf-8') as f:    content = f.read()    for line in f:        print(line.strip())with open('原文件',encoding='utf-8')as f,open('原文件.bak','w',encoding='utf-8')as f1:    for line in f:        new_line = line.replace('原来','新')        f1.write(new_line)import osos.remove('原文件')os.rename('原文件.bak','原文件')

 

转载于:https://www.cnblogs.com/dwenwen/p/7773018.html

你可能感兴趣的文章
全新 DOCKER PALS 计划上线,带给您不一样的参会体验! ...
查看>>
Android开发之自定义View(二)
查看>>
python爬虫之微打赏(scrapy版)
查看>>
自制操作系统Antz day08——实现内核 (中) 扩展内核
查看>>
poj-1056-IMMEDIATE DECODABILITY(字典)
查看>>
阿里云容器Kubernetes监控(二) - 使用Grafana展现Pod监控数据
查看>>
区块链应用 | 不知道什么时候起,满世界都在谈区块链的事情
查看>>
小程序爆红 专家:对简单APP是巨大打击
查看>>
FarBox--另类有趣的网站服务【转】
查看>>
在非纯色背景上,叠加背景透明的BUTTON和STATIC_TEXT控件
查看>>
Distributed2:Linked Server Login 添加和删除
查看>>
Java中取两位小数
查看>>
使用 ftrace 调试 Linux 内核【转】
查看>>
唯一聚集索引上的唯一和非唯一非聚集索引
查看>>
Spark新愿景:让深度学习变得更加易于使用——见https://github.com/yahoo/TensorFlowOnSpark...
查看>>
linux磁盘配额
查看>>
NFS文件共享服务器的搭建
查看>>
%r 和 %s 该用哪个?
查看>>
小公司职场不是“切糕”
查看>>
play工程部署到云服务器
查看>>