博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件初识
阅读量:5208 次
发布时间:2019-06-14

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

文件操作流程:

1、打开文件,得到文件句柄并复制给一个变量

2、通过句柄对文件进行操作

3、关闭文件

#1、打开文件,得到文件句柄并赋值给一个变量f=open('姓名','r',encoding='utf-8')#2、通过句柄对文件进行操作data=f.read()#3、关闭文件f.close()
#1、由应用程序向操作系统发起系统调用open(....)#2、操作系统打开该文件,并返回一个函数句柄给应用程序#3、应用程序将文件句柄赋值给变量f

关闭文件的注意事项

打开一个文件包含两部分资源:操作系统及打开的文件+应用程序的变量。在操作完毕一个文件时,必须把该文件的这两部分资源一个不落的回收,回收方法是:

1、f.close()  # 回收操作系统级打开的文件,必须写2、del f  # 回收应用程序级的变量,可写可不写

其中del f一定要发生在f.close()之后,否则就会导致操作系统打开的文件还没有关闭,白白占用资源,而python自动的垃圾回收机制决定了我们无需考虑del f,这就要求我们在操作完毕文件之后,一定要记住f.close()。

with:由于很多时候会忘记在最后写上f.close(),可以使用with,在运行完with里面的内容之后会自动关闭文件

with open('原文件',encoding='utf-8')as f:    content=f.read()    print(content)# 我承受了这个年纪不该有的机智# 我承受了这个年纪不该有的机智# 我承受了这个年纪不该有的机智# 我承受了这个年纪不该有的机智# 我承受了这个年纪不该有的机智# 我承受了这个年纪不该有的机智

文件的编码:

f=open(.....)是由操作系统打开文件,那如果没有为open指定编码,那么打开文件的默认编码很明显就是由操作系统说的算,此时操作系统会用自己默认的编码去打开文件,在windows中是gbk编码,在linux和mac系统中是utf-8编码。

文件的打开方式:

文件句柄=open('文件路径','模式')

找到文件详解:文件与py的执行文件在相同的路径下,直接用文件的名字既可以打开文件

       文件与py的执行文件不在相同的路径下,就要使用绝对路径来寻找文件

文件的路径,需要用取消转义的方式来表示:1、\\       2、r’件的绝对路径'

如果以写文件的方式打开一个文件,那么不存在的文件就会被创建,存在的文件之前的内容就会被清空。

f=open(r'\Users\Administrator\Desktop\s8_tmp.txt','w',encoding='utf-8')  # 文件路径、操作模式、编码f.write('哈哈哈')f.close()

文件的读写:

f=open('姓名','w')  # f:文件操作符 文件句柄 文件操作对象#习惯叫f file f_obj f_handler fh#print(f.writable())  # 判断文件是否可写#print(f.readable())  # 判断文件是否可读f.write('15768628')  # 写文件的时候需要写数字,需要把数字转换 成字符串
f=open('姓名','w',encoding='utf-8')print(f.write('hdkjhskdj'))print(f.write('jh73987hjdhs'))  # hdkjhskdjjh73987hjdhsf.close()
f=open('姓名','w',encoding='utf-8')print(f.write('bbbbbbb'))print(f.write('aaaaaaaa'))print(f.write('sssss\n'))print(f.write('kkkkkk'))f.close()# bbbbbbbaaaaaaaasssss在sssss之后加\n的时候本行不换行,但是在之后会换行# kkkkkk

打开文件:

#f=open('姓名','r',encoding='utf-8')#f=open('姓名','encoding='utf-8')在打开文件时,默认模式为读。

1、读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容

f=open('姓名','r',encoding='utf-8')content=f.read()print(content)# bbbbbbbaaaaaaaasssss# kkkkkk

2、读一部分内容:read(n),指定读n个单位

f=open('姓名','r',encoding='utf-8')content=f.read(4)print(content)# bbbb
f=open('姓名','r',encoding='utf-8')print(f.read(18))#bbbaaaaaaaasssss#k

3、读文件的第三种方式:按照行读,每次执行readline就会往下读一行。

f=open('姓名','r',encoding='utf-8')content=f.readline()print(content.strip())  # strip去掉空格、制表符、换行#bbbbbbbaaaaaaaassssscontent1=f.readline()print(content1.strip())#kkkkkk

4、读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项,返回一个列表。

f=open('姓名','r',encoding='utf-8')content=f.readlines()print(content) #['bbbbbbbaaaaaaaasssss\n', 'kkkkkk']

5、读:最常用的方法。

f=open('姓名','r',encoding='utf-8')for line in f:    print(line.strip())# bbbbbbbaaaaaaaasssss# kkkkkk

 1、将文件'姓名'中的内容

apple 10000 3 map 10 1200 watch 30000 9 computer 5000 6

  变成{'apple':['10000','3']}

f=open('姓名',encoding='utf-8')goods={}goods_list=[]for line in f:    line=line.strip()    goods_list=line.split()    goods[goods_list[0]]=goods_list[1:]print(goods)f.close()#{'apple': ['10000', '3'], 'map': ['10', '1200'], 'watch': ['30000', '9'], 'computer': ['5000', '6']}

 2、将文件'姓名'中的内容

apple 10000 3 map 10 1200 watch 30000 9 computer 5000 6

  变成[{'apple':'10000'}]

f=open('姓名',encoding='utf-8')goods_list=[]for line in f:    goods_dic={}    line=line.strip()    goods_lts=line.split()    print(goods_lts)    goods_dic['name']=goods_lts[0]    goods_dic['price']=goods_lts[1]    goods_list.append(goods_dic)print(goods_list)f.close()# ['apple', '10000', '3']# ['map', '10', '1200']# ['watch', '30000', '9']# ['computer', '5000', '6']# [{'name': 'apple', 'price': '10000'}, {'name': 'map', 'price': '10'}, {'name': 'watch', 'price': '30000'}, {'name': 'computer', 'price': '5000'}]

3、将文件'姓名'中的内容

apple 10000 3 map 10 1200 watch 30000 9 computer 5000 6

  去掉空格、制表符、换行符之后打印出来

f=open('姓名',encoding='utf-8')for line in f:    if line.strip():        print(line.strip())f.close()# apple 10000 3# map 10 1200# watch 30000 9# computer 5000 6

 

#1. 打开文件的模式有(默认为文本模式):r:只读模式【默认模式,文件必须存在,不存在则抛出异常】w:只写模式【不可读;不存在则创建;存在则清空内容】a:之追加写模式【不可读;不存在则创建;存在则只追加内容】#2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)rb wbab注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

在python文件操作中没有改。

w+:可写可读:一上来文件就清空了。

尽管可读:1、但是读出来的内容是你这次打开文件新写入的

     2、光标在最后,需要主动移动光标才可读

 

f=open('姓名','w+',encoding='utf-8')f.write('abc\n')f.write('hujiben')f.seek(0)  # 将光标移到起始位置print(f.read())# abc# hujiben

一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的。

常用的:

r、w、a

rb、wb、ab 不需要指定编码

f=open('姓名','rb')content=f.read()f.close()print(content)#b'abc\r\nhujiben'f2=open('姓名','wb')print(f2.write(content))  # 12其中\r\n分别占用一个字节f2.close()

文件内的光标移动:

1、seek  光标移动到指定位置

f.seek(0)   移动到最开始

f.seek(0,2)   移动到最末尾

2、tell  告诉我光标在第几个字节

f=open('姓名','r',encoding='utf-8')content=f.readine()print(content.strip())#tell告诉你当前光标所在的位置print(f.tell())f.seek(4)  # 光标移动到三个字节的地方content=f.read(1)  # 读一个字符

3、truncate(n)  从文件开始的位置只保留指定字节的内容

f.truncate(3)  

文件的修改

#打开原文件f=open('原文件',encoding='utf-8')#创建一个新的文件f1=open('原文件.bak','w',encoding='utf-8')# 读出原文件里的内容old_content=f.read()#操作读出来的字符串,把字符串中的内容替换掉new_content=old_content.replace('我承受了','上天给了我')#将替换之后的内容写到新文件里f1.write(new_content)f.close()f1.close()#删除原文件,将新文件重命名成原文件的名字import os  # os模块os.remove('原文件')  # 删除文件os.rename('原文件.bak','原文件')  # 重命名,于replace的用法相似

只修改一行的内容,其他的不改变:
f=open('原文件',encoding='utf-8')f1=open('原文件.bak','w',encoding='utf-8')count=0for i in f:    if '我承受了' in i and count==0:        new_content=i.replace('我承受了','上天给了我')        f1.write(new_content)        count=1    else:f1.write(i)f.close()f1.close()#删除原文件,将新文件重命名成原文件的名字import os  # os模块os.remove('原文件')  # 删除文件os.rename('原文件.bak','原文件')  # 重命名,于replace的用法相似

 

转载于:https://www.cnblogs.com/hzhcdhm/p/7755546.html

你可能感兴趣的文章
组件之间的通信(持续补充)
查看>>
Objective-C基础教程学习笔记(七)Xcode快捷健
查看>>
Ubuntu下的UNITY和GNOME界面
查看>>
SVN备份及其还原 — dump/load方法
查看>>
设计模式-组合模式(Composite Pattern)
查看>>
没有工作经验,没有的究竟是什么?
查看>>
《沉思录卷二》做每一件事都像做最后一件事
查看>>
Axure RP 7.0注册码
查看>>
hdu1873 看病要排队【优先队列】
查看>>
Poj 2528 Mayor's posters (线段树+离散化)
查看>>
Hibernate集合的配置
查看>>
Maven发布项目 (jar包) 到Nexus私服中
查看>>
Spring - IoC(1): Spring 容器
查看>>
MongoDB - The mongo Shell, Configure the mongo Shell
查看>>
php include_path zendframework
查看>>
C#加快Bitmap的访问速度
查看>>
android 解释dp,px,pt,sp单位
查看>>
学习进度条 (第六周)
查看>>
毕业设计周记(第四篇)
查看>>
GDB程序调试(一)
查看>>