python-文件内容操作

文章目录

      • 文件的介绍
      • 文件的理解
      • 文件操作基本知识
      • 文件对象属性与常用方法
        • 文件的读取
        • 文件的写入
        • **上下文管理语句 with**
        • **读CSV文件**
        • 二维数据的存储
        • 从CSV格式的文件中读取数据
        • 将数据写入CSV格式的文件
      • 读取Excel格式数据文件(pandas库)
        • 读取Excel格式数据文件(pandas库)

文件的介绍

为了长期保存数据以便重复使用,修改和共享,必须将数据以文件地形式存储到外部存储介质(如磁盘,U盘或云盘,网盘,快盘)中

文件操作在各类应用软件开发中均占有重要的地位:

  • 管理信息系统时是使用数据源库来存储数据但,而数据库最终还是要以文件的形式存储到硬盘或者其他存储介质中
  • 应用信息的配置信息往往也是用文件来存储的,图形,图像,音频,视频,可执行文件等等也是以文件的形式存储在磁盘上的。

文件的理解

文件是数据的抽象和集合

  • 文件是存储在辅助存储器上的数据序列
  • 文件时数据存储的一种形式
  • 文件展现形态:文本文件和二进制文件
  • 二进制文件和文本文件最主要的区别在于是否有统一的字符编码
  • 二进制文件直接由比特0和比特1组成,没有统一字符编码
  • 文件内部数据的组织格式与文件用途有关。

文本文件:由单一特定编码组成的文件,如UTF-8编码
由于存在编码,也被看成是存储着长字符串
适用于: .txt文件 ,.py文件等
二进制文件 适用于 .png .avi等

文件操作基本知识

无论是文本文件还是二进制文件,其操作流程基本都是一致的,首先打开文件任何创建对象,任何通过该对象对文件内容进行读取,写入,删除,修改等操作,最后关闭并保存文件内容。

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

文件对象属性与常用方法

close(),flush(),read([size]) ,readline(),readlines(),seek(offset[whence]),tell()[返回文件指针当前的位置]
write(s),writelines(s)

文件的读取

f.read(size) 读入全部内容,如果给出参数,读入前size长度

s = f.read(2) # 中国

f.readline(size=-1) 读入一行内容如果给出参数,读入该行前size长度

s = f.readline()
中国是一个伟大的国家!

f.readlines(hint=-1) 读入所有行,以行为元素形成列表,如果给出参数则读取前hint行

s = f.readlines()
[‘中国是一个伟大的国家!’]

文件的逐行操作
逐行遍历文件:方法一

fname = input('请输入要打开的文件的名称')
fo = open(fname,'r')
for line in fo.readlines(): print(line)
fo.close()  
# 一次读入,分行处理

方法二:

fname = input('请输入要打开的文件的名称')
fo = open(fname,"r")
for line in fo:print(line)
fo.close()
# 分行读入,逐行处理

文本内容:

静夜思
作者:李白床前明月光,疑是地上霜。
举头望明月,低头思故乡。

假如你直接这样写:

fname = input('Enter file name: ')
f = open(fname,'r')
for line in f.readlines():print(line)
f.close()

会报错:
在这里插入图片描述
所以我们要指定解码格式

fname = input('Enter file name: ')
f = open(fname,'r',encoding='utf-8')
for line in f.readlines():print(line)
f.close()

在这里插入图片描述

fname = input('Enter file name: ')
f = open(fname,'r',encoding='utf-8')
for line in f:print(line)
f.close()
文件的写入

f.write(s): 向文件写入一个字符串或字节流
f.write(“中国是一个伟大的国家!”)
f.writelines(lines) 将一个元素全为字符串的列表写入文件
ls = [‘中国’,‘法国’,‘美国’]
f.writelines(ls) ⇒ 中国法国美国
f.seek(offset) 改变当前文件操作指针的位置,offset含义如下,0-文件开头,1-当前位置,2-文件结尾
f.seek(0) # 回到文件开头

# w+有读写权限,打开文件后会对文件原有内容进行清空
fo = open('output.txt','w+')
ls = ['中国','法国','美国']
fo.writelines(ls) # 写入一个字符串列表
for line in fo:print(line)
fo.close()
fo = open('output.txt','w+')
ls = ['中国','法国','美国']
fo.writelines(ls)
fo.seek(0)
for line in fo:print(line) # 对比上面那段代,这段代码是会输出内容的 因为文件操作指针被置为开头
fo.close()
上下文管理语句 with

上下文管理语句with,可以自动管理资源,不论因为什么原因(哪怕是代码引发了异常),跳出with块,总能保证文件被正确关闭,并且在代码块执行完毕后自动还原进入该代码块时的上下文,常用于文件操作,数据库连接,网络连接,多线程和多进程同步时的锁对象管理等场合

with open(filename,mode,encoding) as fp:
这里写通过文件对象fp读写文件内容的语句
上下文管理语句with 还支持下面的用法:
with open(‘test.txt’,‘r’) as src,open(‘test_new.txt’,‘w’) as dst:
dst.write(src.read())

读CSV文件

CSV: Comma-Separated Values
逗号分隔值:一种数据文件格式,用逗号分隔不同的值,通常用于表格数据的存储和交换。

  • 国际通用的一二维数组数据1存储格式,一般.csv扩展名
  • 每行一个一维数据,采用逗号分隔,无空行
  • Excel和一般编辑软件都可以读入或另存为csv文件
二维数据的存储

按行存?按列存?
按行存或者按列存都可以,具体由程序决定
一般索引习惯: ls[row][column] ,先行后列
根据一般习惯,外层列表每个元素都是一行,按行存

从CSV格式的文件中读取数据
fo = open(fname)
ls = []
for line in fo:line = line.replace("\n","")ls.append(line.split(","))
fo.close()
将数据写入CSV格式的文件
ls = [[],[],[]] # 二维列表
f = open(fname,'w')
for item in ls:f.write(','.join(item)+'\n')
f.close()

读取Excel格式数据文件(pandas库)

  • pandas(Python Data Analysis Library) 是Python第三方库
    主要数据结构
  1. Series,带标签的一维数组;
  2. DataFrame,带标签且大小可变的二维表格结构

import pandas as pd
pd.read_csv(filepath,header)
参数:
filepath_or_buffer: 可以是txt文件,可以直接写入"文件名.csv"
header: 将行号用作列名,且是数据的开头.
header=None 即指定原始文件数据没有列索引,这样read_csv将为其自动加上列索引(从0开始)
header=0 表示文件第0行(即第一行,索引从0开始) 为列索引
header=0,并指定新的索引的名字names=seq序列
df = pd.read_csv(“ceshi.csv”,header=0,names=range(2,6))
df = pd.read_csv(csv_file,encoding=“utf-8”) 设置读取时的编码或encoding=“gbk”

写入:
df = pd.read_csv(“…”)
df.to_csv(“…”)

读取Excel格式数据文件(pandas库)

使用pandas的read_excel()方法,可以通过文件路径直接读取.注意到,在一个excel文件中有多个sheet,因此建议一次只读取一个sheet
当读取到一个sheet时,返回的是DataFrame类型
(1) 不指定sheet参数,默认读取第一个sheet
df=pd.read_excel(“data_test.xlsx”)
(2) 指定sheet名称读取
df=pd.read_excel(“data_test.xlsx”,sheet_name=“test1”)
(3) 指定sheet索引号读取
df=pd.read_excel(“data_test.xlsx”,sheet_name=0)
同时去读多个,以字典形式返回(不推荐)
df=pd.read_excel(“data_test.xlsx”,sheet_name=[“test1”,“test2”])
指定多个索引号
df=pd.read_excel(“data_test.xlsx”,sheet_name=[0,1])

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节,首先需要考虑的是一块连续区域分配的过程,这个过程中会有很多问题,首先比较关注的一个问题是…

7.高可用集群架构Keepalived双主热备原理

一. 高可用集群架构Keepalived双主热备原理 (1)主机+备机keepalived配置(192.168.1.171) ! Configuration File for keepalivedglobal_defs {# 路由id:当前安装keepalived节点主机的标识符,全局唯一router_id keep_101 } #计算机节点(主机配置) vrrp_instance VI_1 {</

Notepad++的完美替代

由于Notepad的作者曾发表过可能在开发者代码中植入恶意软件的言论&#xff0c;他备受指责。在此&#xff0c;我向大家推荐一个Notepad的完美替代品——NotepadNext和Notepad--。 1、NotepadNext NotepadNext的特点&#xff1a; 1、跨平台兼容性 NotepadNext基于Electron或Qt…

【Chapter 3】Machine Learning Classification Case_Prediction of diabetes-XGBoost

文章目录 1、XGBoost Algorithm2、Comparison of algorithm implementation between Python code and Sentosa_DSML community edition(1) Data reading and statistical analysis(2)Data preprocessing(3)Model Training and Evaluation(4)Model visualization 3、summarize 1…

Linux(CentOS)安装达梦数据库 dm8

CentOS版本&#xff1a;CentOS 7&#xff0c;查看操作系统版本信息&#xff0c;请查阅 查看Linux内核版本信息 达梦数据库版本&#xff1a;dm8 一、获取 dm8 安装文件 1、下载安装文件 打开达梦官网&#xff1a;https://www.dameng.com/ 下载的文件 解压后的文件 2、上传安…

ReactPress与WordPress:两大开源发布平台的对比与选择

ReactPress与WordPress&#xff1a;两大开源发布平台的对比与选择 在当今数字化时代&#xff0c;内容管理系统&#xff08;CMS&#xff09;已成为各类网站和应用的核心组成部分。两款备受欢迎的开源发布平台——ReactPress和WordPress&#xff0c;各自拥有独特的优势和特点&am…

前后端请求响应

引入 在之前的例子中&#xff0c;我们编写了一个简单的web类&#xff0c;我们运行启动类&#xff0c;启动内嵌的tomcat后就可以在浏览器通过特定的路径访问tomcat中的应用程序。 但之前编写的程序仅仅是个简单的java类&#xff0c;其并未实现某个接口或继承某个类&…

Ubuntu24 上安装搜狗输入法

link 首先在终端中依次输入以下代码 sudo apt update sudo apt install fcitx 找到语言支持 在终端中依次输入 sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/ sudo apt purge ibus 进入网页 搜狗输入法linux-首页​ shurufa.sogou.com/linux 找到刚才下…

Linux从0——1之shell编程4

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

嵌入式硬件杂谈(二)-芯片输入接入0.1uf电容的本质(退耦电容)

引言&#xff1a;对于嵌入式硬件这个庞大的知识体系而言&#xff0c;太多离散的知识点很容易疏漏&#xff0c;因此对于这些容易忘记甚至不明白的知识点做成一个梳理&#xff0c;供大家参考以及学习&#xff0c;本文主要针对芯片输入接入0.1uf电容的本质的知识点的进行学习。 目…

树莓派4B Qt+FFMPEG 多线程录制USB相机mjpeg数据流“h264_omx“硬件编码的MP4文件

文章目录 1 前言2 一些问题说明2.0 树莓派4b系统版本2.1 Qt2.2 FFMPEG2.3 图像格式 3 核心代码3.0 代码逻辑3.1 pro文件3.2 avframequeue.cpp3.3 decodethread.cpp 4 资源下载 1 前言 本项目为在树莓派4B开发板上&#xff0c;通过QtFFMPEG以多线程分别解码、编码USB摄像头视频数…

Cartographer激光雷达slam -20241116

Cartographer Cartographer代码结构 cartographer&#xff1a;负责处理来自雷达、IMU和里程计的数据并基于这些数据进行地图的构建&#xff0c;是cartographer理论的底层实现cartographer_ros&#xff1a;基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义…

Scratch 014生日贺卡(上)

知识回顾&#xff1a; 1、“面向鼠标指针”积木块 2、“重复执行直到”积木块 本次分享制作生日贺卡引入广播模块 案列效果&#xff1a; 生日贺卡上案例效果-CSDN直播 步骤拆解&#xff1a; 1、添加背景和角色 2、编辑贺卡造型添加名字 3、流程图的组成和画法 4、…

外网访问 WebDav 服务

从外部网络环境&#xff08;比如异地和家中网络&#xff09;来访问公司内网的 WebDav 服务&#xff08;基于 IIS &#xff09;并映射成本地虚拟磁盘。 步骤如下 第一步 在公司内网的电脑上设置 webDav。 1&#xff0c;找到【控制面板】&#xff0c;双击进入。 2&#xff0c…

渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流

11月14日&#xff0c;渑池县人大副主任、工商联主席杨航率县中药材产业党委代表团一行13人&#xff0c;莅临河南广宇集团参观交流。河南广宇集团总经理王峰、副总经理王培等领导热情接待并陪同参观、座谈。 代表团一行首先参观了集团旗下郑州美信中医院&#xff08;庚贤堂中医药…

WP网站如何增加文章/页面的自定义模板

通过Wordpress我们后台在发布文章或者页面的时候其实可以看到有些主题 他有选择使用的页面模板&#xff0c;可以自定义模板&#xff0c;但是有些主题却没有选择主题这个功能&#xff0c;那这个自定义模板的功能是如何实现的呢&#xff1f;以下分两种情况&#xff1a;Page页面和…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,

也就是将摄像头采集到的YUV 的数据换成 AVFrame&#xff0c;然后再次转成 AVPacket&#xff0c;那么这AVPakcet数据要怎么办呢&#xff1f;分为三种情况&#xff1a; 一种是将AVPacket存储成h264文件&#xff0c;由于h264编码器在将avframe变成avpacket的时候就是按照h264的格…

SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录 背景 一、LIKE - 模糊查询 1. 通配符 % 2. 占位符 _ 3. 指定集合 [] 3.1 表示否定 ^ 3.2 表示范围 - 4. 否定 NOT 二、DISTINCT - 去重查询 三、HAVING - 过滤查询 四、小的查询设置 1. ASC|DESC - 排序 2. TOP - 限制 3. 子查询 4. not in - 取补集&…

动态规划-完全背包问题——322.零钱兑换

1.题目解析 题目来源 322.零钱兑换——力扣 测试用例 2.算法原理 1.状态表示 这里需要寻找硬币使总面值等于一个值求出所需硬币的最小个数&#xff0c;所以不妨设置一个二维dp表&#xff0c;即dp[i][j]&#xff1a;在[1,i]个硬币中选择的硬币总面值完全等于j时所需要的最小硬…

从零到一:利用 AI 开发 iOS App 《震感》的编程之旅

在网上看到一篇关于使用AI开发的编程经历&#xff0c;分享给大家 作者是如何在没有 iOS 开发经验的情况下&#xff0c;借助 AI&#xff08;如 Claude 3 模型&#xff09;成功开发并发布《震感》iOS 应用。 正文开始 2022 年 11 月&#xff0c;ChatGPT 诞生并迅速引发全球关注。…