【Python】#5 基础文件IO详解

文章目录

  • 一、文件概述
  • 二、文件操作
    • 1.文件的打开与关闭
    • 2. 文件的读写
      • 2.1 读取
      • 2.2 写入
      • tips:CSV与JSON文件
    • 一些文件操作小实验
      • 《清明》文本写入与读取
      • 《红楼梦》人物出现统计(部分文本)


一、文件概述

  • 文件是数据的集合和抽象,类似,函数是程序的集合和抽象
  • 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容。
  • 展示形态:文本文件和二进制文件。

二、文件操作

Python中我们依然使用open/write/read...函数来实现文件的打开。
但需要注意的是,如Python中的open性质类似于C语言中的fopen,都为基于系统open接口的包装,是内置函数。如果希望在Python中调用系统的文件操作接口需要引入os库,具体不在此处介绍。
对于常规文件操作,通常仍推荐使用Python内置函数

下图为Liunx内核下open系统接口,更多具体介绍与操作可见【Linux/OS学习】基础文件控制/IO——内存文件
在这里插入图片描述

此文主要介绍Python文件相关的内置函数

1.文件的打开与关闭

open() 函数用于打开一个文件,创建一个 file 对象

  • open函数格式:open(name[, mode[, buffering]])
  • 参数说明:
    • name : 一个包含了你要访问的文件名称的字符串值。

    • mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读

    • buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认

  • 实际上我们还可以再open函数中使用“第四个参数”,encoding="xxx"来规定文件打开时的编码规则(如utf-8、GBK

常用的使用方法是只使用前两个参数:name即操作文件的绝对路径/若只有文件名则是在程序文件工作目录下。
以下为基本mode功能:

mode功能
t文本模式 (默认)
b二进制模式
x写模式,新建一个文件,如果该文件已存在则会报错
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
r以只读方式打开文件。文件的指针将会放在文件的开头(默认)
+打开一个文件进行更新(可读可写)
U通用换行模式(不推荐)

不同的mode之间也可以互相组合使用(相互冲突的不可)

  • with语句:
    with 语句是一种上下文管理器,当它的代码块执行完毕时,会自动关闭文件(recommended)。可以避免一些忘记关闭文件导致的错误。使用示例如下:
file_path = 'example.txt'
with open(file_path, 'a+') as file_stream:
    # 执行文件操作,例如读取文件内容
    file_content = file_stream.read()
    
file_stream.read()# 文件在这里已经被自动关闭,会报错
  • close函数:没有使用with语句时,切记在open文件后,不再使用时手动关闭

2. 文件的读写

2.1 读取

通常来说,我们使用rr+mode来读取文件。
对于一般文件我们可以直接使用file类的函数read()readlines()来读取
如:

fp = 'example.txt'
# 读取文件
with open(fp, 'r+') as fd:
    data = fd.read()
    print(data)

with open(fp, 'r+') as fd:
    lines = fd.readlines()
    for line in lines
    	print(line)
  • readlines 是 Python 中用于读取文件的方法之一,它用于逐行读取文件内容,并将每一行作为字符串存储在一个列表
  • 还有readline 方法,其每次调用只返回文件中的一行作为字符串。如果再次调用,将返回下一行。当文件读取完毕后,返回空字符串 ‘’。通常只在需要逐行处理大型文件时使用。
  • 或者Python本身可直接将文件作为行序列逐行处理
fname= input("请输入要打开的文件:")
fo = open(fname, "r")
for line in fo:
    print(line,end="")
fo.close()

在这里插入图片描述

2.2 写入

Python提供3个与文件内容写入有关的方法,如表所示:

方法含义
.write(s)向文件写入一个字符串或字节流
.writelines(lines)将一个元素为字符串的列表写入文件
.seek(offset[,where])改变当前文件操作指针的位置。offset表示基于where向后偏移几个字节,where的值——0:文件开头(默认);1:当前位置;2:文件结尾

值得一提的是,当我们在使用w或相关组合的mode进行文件打开与写入后,直接调用read之类的函数无法打印文件内容——这是由于此时文件操作指针往往指向文件末尾,之后已经没有字符可以打印。所以我们需要使用seek(0)将文件操作指针重新指向文件开头,此时再调用read之类的函数即可成功打印

tips:CSV与JSON文件

对于以上两种文件,对其进行读写操作需要分别引入csvjson库,具体使用函数详见库


一些文件操作小实验

《清明》文本写入与读取

s = '清明\n唐·杜牧\n清明时节雨纷纷,\n路上行人欲断魂。\n借问酒家何处有?\n牧童遥指杏花村。\n'
fname=s[0]+s[1]+".txt"
with open(f"{fname}","w+",encoding="utf-8") as fd:
    fd.write(s)
    fd.seek(0)
    lines=fd.read()
    for line in lines:
        print(line,end="")

测试结果:
在这里插入图片描述

《红楼梦》人物出现统计(部分文本)

关于中文文本处理,可以引入第三方库jieba,来更好的进行处理操作

import jieba
excludes = {'什么', '一个', '我们', '你们', '如今', '说道', '知道', '起来', '这里','奶奶',
            '姑娘', '出来', '众人', '那里', '自己', '他们', '一面', '只见', '怎么','老太太',
            '两个', '没有', '不是', '不知', '这个', '听见', '这样', '进来', '咱们','太太',
            '告诉', '就是', '东西', '回来', '只是', '大家',  '只得', '丫头','姐姐','不用',
            '过来', '心里', '如此', '今日', '这些', '不敢', '出去', '所以', '不过', '的话',
            '不好', '一时', '不能', '银子', '几个', '答应', '二人', '还有', '只管', '这么',
            '说话', '一回', '那边', '这话', '外头', '打发', '自然', '今儿', '罢了', '屋里',
            '那些', '听说', '如何', '问道', '看见','二爷','小丫头','人家','妹妹','老爷','她们','哪里'}
txt = open("E:\Downloads\红楼梦.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:
        continue
    elif word == "宝玉" or word == "宝二爷" :
        rword = "贾宝玉"
    elif word == "凤姐" or word == "凤辣子" or word == "凤姐儿" or word == "琏二奶奶"  or word == "凤丫头" or word == "凤哥儿" :
        rword = "王熙凤"
    elif word == "老祖宗" or word == "老太君":
        rword = "贾母"
    elif word == "颦颦" or word == "林姑娘" or word == "黛玉" or word == "林妹妹" or word == "潇湘妃子" or word == "林丫头":
        rword = "林黛玉"
    elif word == "宝姑娘" or word == "宝丫头" or word == "蘅芜君" or word == "宝姐姐" or word == "宝钗":
        rword = "薛宝钗"
    elif word == "湘云":
        rword = "史湘云"
    elif word == "存周":
        rword = "贾政"
    elif word == "花珍珠" or word == "花大姑娘":
        rword = "袭人"
    else:
        rword = word
    counts[rword] = counts.get(rword,0) + 1
for word in excludes:
    del(counts[word])
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(20):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

测试结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/579448.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何增强交友、婚恋平台、金融等平台的安全性

运营商二要素核验是一种数字身份验证方法&#xff0c;主要使用用户的手机号码和姓名作为核验要素。这两个要素被认为是最基本的用户身份信息&#xff0c;通过运营商的数据库来核实其真实性。 在实际操作中&#xff0c;用户需要提供手机号码和姓名进行验证。应用系统会调用接口…

全面了解俄罗斯的VK开户和Yandex投放及内容运营

俄罗斯的VKontakte&#xff08;简称VK&#xff09;和Yandex是两个重要的在线平台&#xff0c;对于希望在俄罗斯市场进行推广的企业来说&#xff0c;了解如何在这些平台上开户和投放广告以及内容运营是非常关键的。 俄罗斯vk广告如何开户&#xff1f; 通过上海上弦进行俄罗斯V…

手写一个RNN前向传播以及反向传播

前向传播 根据公式 st tanh (Uxt Wst-1 ba) ot softmax(Vst by ) m 3 词的个数 n 5 import numpy as np import tensorflow as tf # 单个cell 的前向传播过程 # 两个输入&#xff0c;x_t&#xff0c;s_prev,parameters def rnn_cell_forward(x_t,s_prev,parameter…

每日OJ题_DFS回溯剪枝⑧_力扣494. 目标和

目录 力扣494. 目标和 解析代码&#xff08;path设置成全局&#xff09; 解析代码&#xff08;path设置全局&#xff09; 力扣494. 目标和 494. 目标和 难度 中等 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联…

SpringBoot + Vue实现Github第三方登录

前言&#xff1a;毕业设计终于好了&#xff0c;希望能有空多写几篇 1. 获取Github账号的Client ID和Client secrets 首先点击这个链接进入Github的OAuth Apps页面&#xff0c;页面展示如下&#xff1a; 之后我们可以创建一个新的apps: 填写资料&#xff1a; 创建之后就可以获…

WebGIS面试题(第六期)-GeoServer

WebGIS面试题&#xff08;第六期&#xff09; 以下题目仅为部分题目&#xff0c;全部题目在公众号 {GISer世界} &#xff0c;答案仅供参考!!! 因为本人之前做过相关项目用到了GeoServer&#xff0c;因此在简历上写了熟悉GeoServer。所以在相关面试中都有问到&#xff0c;所以我…

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器(Http板块)

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器&#xff08;Http板块&#xff09; 一、思路图二、Util板块1、Splite板块&#xff08;分词&#xff09;&#xff08;1&#xff09;代码&#xff08;2&#xff09;测试及测试结果i、第一种测试ii、第二种…

[论文阅读] 3D感知相关论文简单摘要

Adaptive Fusion of Single-View and Multi-View Depth for Autonomous Driving 提出了一个单、多视图融合深度估计系统&#xff0c;它自适应地集成了高置信度的单视图和多视图结果 动态选择两个分支之间的高置信度区域执行融合 提出了一个双分支网络&#xff0c;即一个以单…

查看笔记本电池容量/健康状态

1. 打开命令行提示符 快捷键“win R”后输入“cmd” 2. 在命令提示符中输入命令 “powercfg /batteryreport" 并回车 3. 查看文件 最后就可以看到笔记本的电池使用报告了

Promises: JavaScript异步编程的救星

Promises: JavaScript异步编程的救星 Promises&#xff08;承诺&#xff09;是JavaScript中处理异步操作的一种机制&#xff0c;它提供了一种更优雅和可读性更高的方式来处理异步代码。Promises的实现原理基于一种称为"Promise/A"规范的约定&#xff0c;该规范定义了…

[蓝桥杯2024]-Reverse:rc4解析(对称密码rc4)

无壳 查看ida 这里应该运行就可以得flag&#xff0c;但是这个程序不能直接点击运行 按照伪代码写exp 完整exp&#xff1a; keylist(gamelab) content[0xB6,0x42,0xB7,0xFC,0xF0,0xA2,0x5E,0xA9,0x3D,0x29,0x36,0x1F,0x54,0x29,0x72,0xA8, 0x63,0x32,0xF2,0x44,0x8B,0x85,0x…

visual studio2022,开发CMake项目添加rabbitmq库,连接到远程计算机并进行开发于调试

1.打开visual studio installer 。安装“用于 Windows 的 C CMake 工具” 2.新建CMake项目 3.点击VS的“工具”—>"选项“—>“跨平台”—>”连接管理器“,添加远程计算机。用来将VS编辑的代码传到服务器进行编译–连接—运行&#xff08;调试&#xff09;。 …

BIO、NIO与AIO

一 BIO 同步并阻塞(传统阻塞型)&#xff0c;服务器实现模式为一个连接一个线程&#xff0c;即客户端有连接请求时服务器端就需要启动一个线程进行处理. BIO&#xff08;Blocking I/O&#xff0c;阻塞I/O&#xff09;模式是一种网络编程中的I/O处理模式。在BIO模式中&#xf…

鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元

任务即线程 在鸿蒙内核中&#xff0c;广义上可理解为一个任务就是一个线程 官方是怎么描述线程的 基本概念 从系统的角度看&#xff0c;线程是竞争系统资源的最小运行单元。线程可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它线程运行。 鸿蒙内核每个…

[蓝桥杯2024]-PWN:fd解析(命令符转义,标准输出重定向)

查看保护 查看ida 这里有一次栈溢出&#xff0c;并且题目给了我们system函数。 这里的知识点没有那么复杂 完整exp&#xff1a; from pwn import* pprocess(./pwn) pop_rdi0x400933 info0x601090 system0x400778payloadb"ca\\t flag 1>&2" print(len(paylo…

SAP PP学习笔记07 - 作业手顺(工艺路线Routing)

上一章讲了BOM的相关知识。 SAP PP学习笔记07 - 简单BOM&#xff0c;派生BOM&#xff0c;多重BOM&#xff0c;批量修改工具 CEWB_sap半成品有多个bom-CSDN博客 本章来讲作业手顺&#xff08;工艺路线Routing&#xff09;的相关知识。 1&#xff0c;作业手顺(工艺路线 Routing…

四、线段、矩形、圆、椭圆、自定义多边形、边缘轮廓和文本绘制(OpenCvSharp)

功能实现&#xff1a; 对指定图片上进行绘制线段、矩形、圆、椭圆、自定义多边形、边缘轮廓以及自定义文本 一、布局 用到了一个pictureBox和八个button 二、引入命名空间 using System; using System.Collections.Generic; using System.Drawing; using System.Windows.F…

Dockerfile镜像构建实战

一、构建Apache镜像 cd /opt/ #建立工作目录 mkdir /opt/apache cd apache/vim Dockerfile #基于的基础镜像 FROM centos:7 #维护镜像的用户信息 MAINTAINER this is apache image <cyj> #镜像操作指令安装Apache软件 RUN yum install -y httpd #开启80端口 EXPOSE 80 #…

远程桌面连接不上个别服务器的问题分析与解决方案

在日常的IT运维工作中&#xff0c;远程桌面连接&#xff08;RDP&#xff0c;Remote Desktop Protocol&#xff09;是我们经常使用的工具之一&#xff0c;用于管理和维护远程服务器。然而&#xff0c;有时我们可能会遇到无法连接到个别服务器的情况。针对这一问题&#xff0c;我…

《Kafka 3.x.x 入门到精通》

Kafka 3.x.x 入门到精通 Kafka是一个由Scala和Java语言开发的&#xff0c;经典高吞吐量的分布式消息发布和订阅系统&#xff0c;也是大数据技术领域中用作数据交换的核心组件之一。以高吞吐&#xff0c;低延迟&#xff0c;高伸缩&#xff0c;高可靠性&#xff0c;高并发&#x…