前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python程序设计之文件(上)

Python程序设计之文件(上)

作者头像
用户6256742
发布2024-05-30 13:04:44
760
发布2024-05-30 13:04:44
举报
文章被收录于专栏:网络日志网络日志
1.文本形式:

根据文件中的组织形式可以划分为:

1.1 文本文件(文本文件存储常规字符串,有若干文本行组成,通常每行使用'\n'结尾。字符串指的是记事本或其他文本编辑器能够正常显示、编辑并且能够被人类直接阅读和理解的字符串)

1.2 二进制文件(把对象内容以字节串(bytes)进行存储 ,无法用记事本或其他普通文件编辑器直接进行编辑,通常也无法被人类直接阅读和理解, 需要使用专门的软件进行解码后读取,显示,修改和执行)

2.文件操作格式:

2.1 文件对象名=open(文件名,[,打开方式[,缓冲区]])

2.2 文件名:需要进行操作的文件,需要相对路径,可以使用原始字符串

2.3 打开方式:有只读(r),只写(w),有追加(a),有二进制模式(b),有读写(+),其中二进制模式和读写可以与其他模式组合使用

2.4 文件对象属性:closed(判断文件是否关闭,没有关闭就关闭文件,关闭就返回True),mode(返回文件打开模式),name(返回打开文件名) #缓冲区:指定了读写文件的缓存模式,0(表示不缓存),1(表示缓存),n(n>1,表示缓存区的大小),默认值(默认值为缓存模式)

3.文件对象常用方法:
代码语言:javascript
复制
flush()    把缓冲区内容写入文件,但不关闭文件
close()    把缓冲区内容写进文件,并关闭文件,释放文件对象
read([size])   从文件中读取size个字符的内容作为结果返回,如果省略size则表示一次性读取所有内容
readline() 读取文本一行内的内容
readlines()    读取文本行内容,并将每一行存进一个列表中,返回该列表
seek(offset[,wehence]) 把文件指针移动到新的位置,offset表示相对于whence的位置,whence可以为0(表示从文件开头开始计算),1(表示从当前位置开始计算),2(表示从文件末开始计算)
tell() 返回文件指针当前的位置
truncate([size])   删除从当前指针位置到文件末尾的内容,如果指定了size的值,则只保留前size个字节,其余1的删除
writes(s)  把字符串内容s写进文件
writelines(s)  把字符串列表写入文本文件,不添加换行符
4.案例使用

4.1 以追加方式打开文件并写入"Hello, my open file! "

代码语言:javascript
复制
#方法一,需要显示调用close()
fp1=open('1.txt','a+')
s='Open File first way!'+'\n'
fp1.write(s)
fp1.close()
#方法二,使用with关键字,会自动管理资源
s='Open file second way!'+'\n'
with open('1.txt','a+') as f:
    f.write(s)

查看文本内容

代码语言:javascript
复制
#rean()/readline()/readlines()
fp=open('1.txt','r+')
print('读取所有内容:',fp.read(),end='\n')
print('查看当前文件指针:',fp.tell(),end='\n')
print('设置文件指针:',fp.seek(0),end='\n')
print('读取第一个字符内容:',fp.read(1),end='\n')
print('读取第一行内容:',fp.readline(),end='\n')
print('读取所有行内容,以列表形式存储:',fp.readlines(),end='\n')
fp.close()

4.2 读取文本所有整数,并将其升序排序

代码语言:javascript
复制
import re
def order(filename):
    with open(filename,'r+') as fp2:
        s=fp2.read()
        #print(s)
    list=re.split(r'\s+',s)
    for i in range(len(list)):
        list[i]=int(list[i])
    list.sort()
    #print(list)
    #print(list)
    #print(list,end='\n')
order('2.txt')

4.3 打开一个文件,在其尾部每一行加上一个其行数,使用列表推导公式

代码语言:javascript
复制
def add(filename):
    with open(filename,'r+') as fp3:
        s1=fp3.readlines()
    #for i in range(len(s)):
    #    s[i]+='\n'
    s1=[s.rstrip()+' '*(100-len(s))+'#'+str(index)+'\n' for index,s in enumerate(s1)]
    with open('4.txt','a+') as fp4:
        fp4.writelines(s1)
        #for i in range(len(s)):
        #    fp4.write(s[i])
add('3.txt')
5.二进制文件的操作

1)二进制文件操作,只有正确理解了二进制文件的序列化和结构化话规则,才能正确理解其中内容并设计正确的反序列化规则,常用的二进制文件序列化模块有struct、pickle、json、marshal、shelve.

2)案例使用

①pickle模块 写入信息到文件

代码语言:javascript
复制
import pickle
fp5=open('1.dat','wb')
n=1
i=100
c=1.9
s='中国'
lis=[[1,2,3],[2,3,4],[4,5,6]]
dic={'1':'1','2':'2','3':'3'}
tup=(1,2,3,4)
coll={1,2,3,4}
try:
    pickle.dump(n,fp5)
    pickle.dump(i,fp5)
    pickle.dump(c,fp5)
    pickle.dump(dic,fp5)
    pickle.dump(lis,fp5)
    pickle.dump(tup,fp5)
    pickle.dump(coll,fp5)
    pickle.dump(s,fp5)
except:
    print('output error!')
finally:
    fp5.close()

从文件中读取信息

代码语言:javascript
复制
fp6=open('1.dat','rb')
n=pickle.load(fp6)
i=0
while i<n:
    print(pickle.load(fp6),end='\n')
    i+=1
fp6.close()

②stuct模块 写入到文件

代码语言:javascript
复制
import struct
sn=struct.pack('if?',n,i,c)
fp7=open('2.dat','wb')
fp7.write(sn)
fp7.write(s.encode())
fp7.close()

读取操作

代码语言:javascript
复制
fp8=open('2.dat','rb')
sn=fp8.read(9)
tu=struct.unpack('if?',sn)
print(tu)
n,x,b=tu
print('n=',n,'x=',x,'b=',b,end='\n')
s=fp8.read(9)
s=s.decode()
print('s=',s,end='\n')
6.学习笔记:

1.文件类型:文本文件(可以被人类直接解读);二进制文件(需要借助特殊工具才能完成解读);

2.文件打开常见操作有以读的方式(r),以写的方式(w),以二进制模式(b),以追加模式(a),以读写模式(+)

3.文件对象常用方法:

代码语言:javascript
复制
#flush()    把缓冲区内容写入文件,但不关闭文件
#close()    把缓冲区内容写进文件,并关闭文件,释放文件对象
#read([size])   从文件中读取size个字符的内容作为结果返回,如果省略size则表示一次性读取所有内容
#readline() 读取文本一行内的内容
#readlines()    读取文本行内容,并将每一行存进一个列表中,返回该列表
#seek(offset[,wehence]) 把文件指针移动到新的位置,offset表示相对于whence的位置
# ,whence可以为0(表示从文件开头开始计算),1(表示从当前位置开始计算),2(表示从文件末开始计算)
#tell() 返回文件指针当前的位置
#truncate([size])   删除从当前指针位置到文件末尾的内容,如果指定了size的值,则只保留前size个字节,其余1的删除
#writes(s)  把字符串内容s写进文件
#writelines(s)  把字符串列表写入文本文件,不添加换行符

4.二进制文件的操作需要引用其他模块,常见的有struct、pickle、json、marshal、shelve.

5.在打开文件时,如果没有找到指定文件,会自动创建一个文件。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.文本形式:
  • 2.文件操作格式:
  • 3.文件对象常用方法:
  • 4.案例使用
  • 5.二进制文件的操作
  • 6.学习笔记:
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档