Python程序设计——文件操作(需要继续研究研究)

文件操作介绍

文件的作用

一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”。 默认数据是加载到内存中,结果也是保存到内存中, 程序执行结束,所有的数据释放。

文件的打开

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件。
open(文件名,访问模式) e.g. f = open(‘test.txt’, ‘w’)
如果文件不存在那么创建,如果存在那么就先清空,然后写入数据
在这里插入图片描述

  • 文件常用操作
    在这里插入图片描述
"""
mode:
    r: 只能读文件
    w: 只能写入(清空文件内容)
    a+: 读写(文件追加写入内容)
"""
#1.打开文件
f = open('hello.txt',mode='a')   ##文件是自己建立在当前目录,w写,a追加
#2.文件读写操作
f.write('java\n')
#3.关闭文件(核心:打开之后必须关闭)
"""
方法一:
    调用close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,
并且操作系统同一时间能打开的文件数量也是有限的:
"""
f.close()

  • with和seek
"""
    with语句:python中的with语句使用于对资源进行访问的场合,
保证不管处理过程中是否发生错误或者异常都会自动执行规定的(“清理”)操作,
释放被访问的资源,比如有文件读写后自动关闭、线程中锁的自动获取和释放等。

    seek:seek(offset, from)有2个参数:  offset:偏移量  from:方向
        0:表示文件开头;
        1:表示当前位置;
        2:表示文件末尾

        1). 把位置设置为:从文件开头,偏移5个字节
        2). 把位置设置为:文件最开始
        3). 把位置设置为:文件最末尾


"""
with open('hello.txt','w+') as f:   #w+先清空在写
    f.write('hello westos\n')    ##写入文件 #先清空原来的hello,写入hello westos
    f.seek(0,0)               ##移动指针到文件最开始
    print("当前指针的位置:",f.tell())
    f.seek(0,2)              ##移动指针到文件末尾
    print("当前指针的位置:", f.tell())
    print(f.read())       ##读取文件内容

json模块

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。

这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)

在这里插入图片描述

  • python 中str类型到JSON中转为unicode类型,None转为null,dict对应object;
    pyhton中的集合不能转成json格式。
    在这里插入图片描述
    在这里插入图片描述
import  json
#1.将python对象编码成json字符串
users = {'user1':'westos',"age":18,"city":"西安"}
json_str = json.dumps(users)
with open('doc/hello.json','w') as f:
    #ensure_ascii=False 中文可以存储成功
    #indent=4缩进为4个空格
    json.dump(users,f,ensure_ascii=False,indent=4)
print(json_str,type(json_str))

#2.将json字符串解码成python对象
with open('doc/hello.json') as f:
    python_obj = json.load(f)
    print(python_obj)

原文链接:https://blog.csdn.net/weixin_45174102/article/details/113983033

以下是见解不成熟版(不想删系列)

文件基础知识

  • 无论何种类型的文件,在内存或磁盘上最终都是以二进制编码存储的。根据逻辑上编码的不同,可以区分为文本文件和二进制文件。
  • 文本文件基于字符编码,如ASCII码、Unicode编码等。文本文件存储的是普通字符串,能够用记事本等文本编辑器直接显示字符、进行编辑。
  • 二进制文件是基于值编码的,以字节串的形式存储,其编码长度根据值的大小长度可变。通常在文件的头部相关属性中定义表示值的编码长度。二进制文件不能用文本编辑器显示或编辑,如声音、图像等文件。

文件的打开与关闭

  • 打开一个文件:

  • 格式:open(name[, mode [, buffering]])

  • 说明:

    • name是唯一必须提供的参数,即为文件名。
    • mode和buffering是可选参数,在后面小节对其详细说明。
  • 调用open函数之后,将得到一个文件对象。

  • 假如在d盘根目录下存在一个名为’test.txt’的文件,可以通过以下语句打开它:

    • f = open(r'd:\test.txt')
    • 如果d盘中不存在这个文件,则会提示以下错误:在这里插入图片描述
  • 在windows操作系统下,Python函数中文件名所包含的路径名有如下三种写法:

    • f = open(r'd:\test.txt')
    • f = open('d:\\test.txt')
    • f = open('d:/test.txt')
  • Python中的文件对象有三种常用属性:

    • closed属性用于判断文件是否关闭,若文件处于打开状态,则返回False;
    • mode属性返回文件的打开模式;
    • name属性返回文件的名称。
  • 在文件读写完毕之后,要注意使用f.close()方法关闭文件,以把缓存区的数据写入磁盘,释放内存资源供其他程序使用。

  • 如果只提供给open函数一个参数’name’,那么将返回一个只读的文件对象。如果需要将数据写入文件中,需通过mode参数提供文件打开模式。该参数有多种选择,具体参见表:
    在这里插入图片描述

文本文件的写入

  • open()函数在’r+'、‘w’、‘w+’、 'a’和’a+'等模式下打开文件后,可返回一个文本文件对象,在此基础上可以往文本文件写入数据。文件对象内置读写数据的方法write()、writelines()
    在这里插入图片描述
    在这里插入图片描述
  • 打开d盘的test.txt文件可以发现其中有两行文本:123和abc。另外,需注意的是,一旦在’w’模式下打开某个已经存在的文件,则该文件里的原有数据会被清空。
  • 在上一个例子生成的test.txt基础上,如果继续运行如下代码:
    在这里插入图片描述
  • 此时,打开d盘的test.txt文件可以发现其中有2行字符:567和def,之前的内容已被清除。
  • 除了write()方法外,writelines()可实现逐行写入给定列表中的所有字符串元素
    在这里插入图片描述
  • 打开test.txt文件可以发现有4行文本:567,def,123和abc。
    在这里插入图片描述

文本文件的读取

  • open()函数在’r’、‘r+’、'w+'和’a+'等模式打开文件后,可返回一个文本文件对象,在此基础上实现对文本文件的读取。文件对象内置读取数据的方法有read()、readline()、readlines(),如图所示:

    在这里插入图片描述

  • 在d盘根目录下新建一个名为’test.txt’的文件,并在其中输入两行英文’hello Python!‘和’how are you!’,然后保存并关闭文件。

  • 在‘r’模式下构建文件对象f之后,可以用其内置函数read()、readline()和readlines()等方法读取出f中的数据。利用read()方法可读取文件中指定长度的字符,若括号中无数字,则直接读取文件中所有的字符;若提供数字,则一次读取指定数量的字符。

    在这里插入图片描述

  • 文件对象的内置方法readline()可实现逐行读取字符,若括号中无数字,则默认读取一行;若括号中有数字,则读取这一行中对应数量的字符(如果该数字大于这一行剩余的字符数,则读取这一行剩余的所有字符)。
    在这里插入图片描述

  • 文件对象的内置方法f.readlines()可实现读取一个文件中的所有行,并将其作为一个列表返回。每一行的信息作为列表中的一个字符串元素。
    在这里插入图片描述

  • 调用readlines()方法将返回一个以文件每一行内容作为元素的列表存储在内存之中。当文件很大时,则需要占用较大的内存,影响到计算机的正常运行。此时,有三种方法可以替代readlines()以减少内存的占用:
    (1)组合使用循环结构与readline()方法,逐行读取文本内容;
    (2)利用iter(文件对象)返回一个迭代器,从而降低了对计算机内存的占用;
    (3)利用文件对象迭代功能,逐行读取信息。
    在这里插入图片描述

  • 最后,如果需要将迭代器转化为列表,则可考虑以下方法:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇宙超级无敌霸王龙捏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值