Python 读取和写入文本文件(txt)、Excel 文件和 JSON 文件的方法

Python 读取和写入文本文件(txt)、Excel 文件和 JSON 文件的基本方法

  • 读取/写入 txt 文件
    • 基本读取txt
      • 读取 txt 文件
      • 写入 txt 文件
      • 按行读取复杂数据
      • 处理大txt文本文件(逐行读取以节省内存)
  • 读取/写入 Excel 文件
    • 基本读取
      • 读取 Excel 文件
      • 写入 Excel 文件
      • 处理复杂 Excel 文件(多个工作表)
      • 处理大 Excel 文件(使用 `pandas` 的 `chunksize` 参数)
  • 读取/写入 JSON 文件
    • 基本读取
      • 基本读取 JSON 文件
      • 写入 JSON 文件
      • 读取嵌套数据:
    • 读取嵌套json文件:
        • 写入嵌套 JSON 数据
    • 复杂读取json文件
      • 方法一:逐行读取并解析每行 JSON
      • 方法二:逐行读取并解析嵌套 JSON
      • 方法三:处理大 JSON 文件(分块读取)
      • 方法四:使用 `jsonlines` 库

Python 提供了多种方法来读取和写入不同类型的文件,包括文本文件(txt)、Excel 文件和 JSON 文件。以下是一些常用的方法和示例代码:

读取/写入 txt 文件

基本读取txt

读取 txt 文件

  1. 使用内置的 open 函数
# 读取整个文件内容
with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()print(content)# 逐行读取文件内容
with open('example.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())

写入 txt 文件

  1. 使用内置的 open 函数
# 写入文本到文件(覆盖模式)
with open('example.txt', 'w', encoding='utf-8') as file:file.write('Hello, World!\n')# 追加文本到文件
with open('example.txt', 'a', encoding='utf-8') as file:file.write('Appending a new line.\n')

按行读取复杂数据

  1. 逐行读取并处理每行数据
# 假设我们的文件内容如下:
# Name, Age, City
# Alice, 30, New York
# Bob, 25, Los Angeleswith open('example.txt', 'r', encoding='utf-8') as file:header = file.readline().strip().split(', ')data = []for line in file:values = line.strip().split(', ')record = dict(zip(header, values))data.append(record)print(data)

处理大txt文本文件(逐行读取以节省内存)

# 逐行读取大文件
with open('large_file.txt', 'r', encoding='utf-8') as file:for line in file:process_line(line)  # 自定义的处理函数

读取/写入 Excel 文件

基本读取

读取 Excel 文件

  1. 使用 pandas
import pandas as pd# 读取 Excel 文件
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')
print(df)
  1. 使用 openpyxl 库(适用于 .xlsx 文件)
from openpyxl import load_workbook# 读取 Excel 文件
wb = load_workbook('example.xlsx')
sheet = wb['Sheet1']
for row in sheet.iter_rows(values_only=True):print(row)

写入 Excel 文件

  1. 使用 pandas
import pandas as pd# 创建一个 DataFrame
data = {'Name': ['Alice', 'Bob'], 'Age': [25, 30]}
df = pd.DataFrame(data)# 写入 Excel 文件
df.to_excel('example.xlsx', sheet_name='Sheet1', index=False)
  1. 使用 openpyxl
from openpyxl import Workbook# 创建一个新的 Excel 文件
wb = Workbook()
sheet = wb.active
sheet.title = 'Sheet1'# 写入数据
sheet.append(['Name', 'Age'])
sheet.append(['Alice', 25])
sheet.append(['Bob', 30])# 保存文件
wb.save('example.xlsx')

处理复杂 Excel 文件(多个工作表)

  1. 使用 pandas 读取多个工作表
import pandas as pd# 读取 Excel 文件的所有工作表
xls = pd.ExcelFile('example.xlsx')
sheets = {}
for sheet_name in xls.sheet_names:sheets[sheet_name] = pd.read_excel(xls, sheet_name=sheet_name)print(f"Sheet: {sheet_name}")print(sheets[sheet_name])
  1. 使用 openpyxl 逐行读取
from openpyxl import load_workbook# 读取 Excel 文件
wb = load_workbook('example.xlsx')
for sheet_name in wb.sheetnames:sheet = wb[sheet_name]print(f"Sheet: {sheet_name}")for row in sheet.iter_rows(values_only=True):print(row)

处理大 Excel 文件(使用 pandaschunksize 参数)

import pandas as pd# 逐块读取大 Excel 文件
chunk_size = 1000
for chunk in pd.read_excel('large_file.xlsx', sheet_name='Sheet1', chunksize=chunk_size):process_chunk(chunk)  # 自定义的处理函数

读取/写入 JSON 文件

基本读取

基本读取 JSON 文件

  1. 使用内置的 json 模块
import json# 读取 JSON 文件
with open('example.json', 'r', encoding='utf-8') as file:data = json.load(file)print(data)

写入 JSON 文件

  1. 使用内置的 json 模块
import json# 数据
data = {'name': 'Alice', 'age': 25}# 写入 JSON 文件
with open('example.json', 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=4)

读取嵌套数据:

读取嵌套json文件:

  1. 读取嵌套 JSON 数据
import json# 假设我们的 JSON 文件内容如下:
# {
#     "name": "Alice",
#     "age": 30,
#     "address": {
#         "city": "New York",
#         "zipcode": "10001"
#     },
#     "phones": ["123-456-7890", "987-654-3210"]
# }with open('example.json', 'r', encoding='utf-8') as file:data = json.load(file)print(data)# 访问嵌套数据
print(data['address']['city'])  # 输出: New York
print(data['phones'][0])  # 输出: 123-456-7890
写入嵌套 JSON 数据
import json# 嵌套数据
data = {"name": "Alice","age": 30,"address": {"city": "New York","zipcode": "10001"},"phones": ["123-456-7890", "987-654-3210"]
}# 写入 JSON 文件
with open('example.json', 'w', encoding='utf-8') as file:json.dump(data, file, ensure_ascii=False, indent=4)

复杂读取json文件

按行读取 JSON 文件在处理大文件或流式处理数据时非常有用。以下是一些方法来按行读取 JSON 文件:

方法一:逐行读取并解析每行 JSON

如果 JSON 文件每行都是一个独立的 JSON 对象,可以逐行读取并解析每行:

import json# 假设我们的 JSON 文件内容如下,每行是一个独立的 JSON 对象:
# {"name": "Alice", "age": 30}
# {"name": "Bob", "age": 25}with open('example.json', 'r', encoding='utf-8') as file:for line in file:data = json.loads(line.strip())print(data)

方法二:逐行读取并解析嵌套 JSON

如果 JSON 文件是一个包含多个对象的数组,可以使用 ijson 库逐行解析嵌套 JSON 数据:

import ijson# 假设我们的 JSON 文件内容如下:
# [
#     {"name": "Alice", "age": 30},
#     {"name": "Bob", "age": 25}
# ]with open('example.json', 'r', encoding='utf-8') as file:parser = ijson.parse(file)for prefix, event, value in parser:if prefix.endswith('.name') and event == 'string':print(f"Name: {value}")elif prefix.endswith('.age') and event == 'number':print(f"Age: {value}")

方法三:处理大 JSON 文件(分块读取)

对于非常大的 JSON 文件,可以考虑分块读取和处理:

import jsondef process_chunk(chunk):for line in chunk:data = json.loads(line.strip())print(data)chunk_size = 1000  # 每次读取1000行with open('large_file.json', 'r', encoding='utf-8') as file:chunk = []for line in file:chunk.append(line)if len(chunk) >= chunk_size:process_chunk(chunk)chunk = []if chunk:process_chunk(chunk)

方法四:使用 jsonlines

jsonlines 库专门用于处理每行一个 JSON 对象的文件:

import jsonlines# 假设我们的 JSON 文件内容如下,每行是一个独立的 JSON 对象:
# {"name": "Alice", "age": 30}
# {"name": "Bob", "age": 25}with jsonlines.open('example.json') as reader:for obj in reader:print(obj)

这些方法可以帮助你按行读取 JSON 文件,根据文件的具体结构和大小选择合适的方法来处理数据。
以上是一些常见的方法来读取和写入 txt、Excel 和 JSON 文件。每种方法都有其优缺点,选择哪种方法取决于具体的需求和使用场景。

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

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

相关文章

Transformer和Bert的原理是什么

文章目录 一、Transformer原理二、Bert的原理 一、Transformer原理 Transformer是一种基于注意力机制(Attention Mechanism)的深度学习模型架构,最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。Transformer主要用于处…

Tomcat异常处理【Spring源码学习】

当没有指定具体控制器异常处理方法时,默认走的异常会被tomcat捕获; /** * 基于ControllerAdvice的异常处理只能处理Spring层面的异常; * 如果我们自定义了过滤器在过滤器中抛出了异常这种情况下需要更高级的异常捕获 * ControllerAdvice无法…

Go 语言 UUID 库 google/uuid 源码解析:UUID version4 的实现

google/uuid 库地址 本文将解析 googl/uuid 库中 UUID 变体10版本4的实现。 版本 4 的 UUID 采取完全随机的方式实现,简单来说就是将 UUID 中的 122 位全部随机填充(剩余的 6 位作标记位)。版本 4 的 UUID 存在一定的重复风险,但…

PostgreSQL 复制延迟

PostgreSQL 的流复制(Streaming Replication)是一种高效的复制机制,用于在主服务器和一个或多个备用服务器之间传输数据,以实现高可用性和负载均衡。然而,复制一旦延迟可能会带来显著的挑战。本文将带您了解有关 Postg…

springboot中在filter中用threadlocal存放用户身份信息

本文章主要描述通过springboot的filter类,在过滤器中设置jwt信息进行身份信息保存的方法 流程:请求->过滤器->解析请求的body信息->放入threadlocal中 定义filter:一个使用 Servlet 规范的过滤器(Filter),它…

网络通信、BIO、NIO

1. 涉及的网络基础知识 Socket: 操作系统提供的api,介于应用层和tcp/ip层之间的软件层,封装服务器客户端之间网络通信相关内容,方便调用 IO多路复用: (I/O Multiplexing)是一种IO操作模式&a…

Android中线程的状态state都有哪些?S,R分表代表含义

在Android中,线程的状态(state)可以类比于Java线程的状态,因为Android是基于Java的。Java中线程的状态通常分为六种,这些状态在Android中也是适用的。具体状态及含义如下: NEW(新生&#xff09…

Python 的 metaclass

文章目录 先说结论1. metaclass 的作用2. 主要的执行过程 1. metaclass.__new__2. metaclass.__call__关于 metaclass.__init__ 3. metaclass.__prepare__4. 自动创建 __slots__ 属性4.1 metaclass 的接口类4.2 metaclass conflict 5. Class metaprogramming 先说结论 1. meta…

Java技术栈总结:JVM虚拟机篇

一、Java的四种引用类型 1、强引用 最常见的引用,类似Object obj new Object()、String str “hello”。如果一个对象具有强引用,垃圾回收器绝对不会回收它。即使抛出“OutOfMemoryError”错误,程序终止,也不会随意回收具有强引…

20240710 每日AI必读资讯

🤖微软:不会像 OpenAI 一样阻止中国访问 AI 模型 - OpenAI 将于周二(7 月 9 日)开始阻止中国用户访问其 API。 - 微软发言人表示:Azure OpenAI API服务在中国的提供方式没有变化。 - 公司仍然通过部署在中国以外地区…

亲测解决! Package pdftex.def Error: ‘eps-converted-to.pdf‘ not found

这个问题在小虎写论文的时候遇到,解决方法是将eps文件替换成pdf或者png。 环境 win11 MiKTeX 解决方法 将eps文件转换成pdf或者图片的格式,然后嵌入的时候改一下后缀就好了。 \begin{figure}[!t] \centering \includegraphics[width\columnwidth]{…

妙笔生词智能写歌词软件:创新助力还是艺术之殇?

在音乐创作日益普及和多样化的当下,各种辅助工具层出不穷,妙笔生词智能写歌词软件便是其中之一。那么,它到底表现如何呢? 妙笔生词智能写歌词软件(veve522)的突出优点在于其便捷性和高效性。对于那些灵感稍…

c/c++:牛客小白月赛93

比赛链接 A 生不逢七 题目描述(题目链接添加链接描述): 睡前游戏中最简单又最好玩的游戏就是这个啦! 该游戏规则为:多名玩家轮流报数,当要报的数字中含有 7 或者是 7 的倍数时(例如 37,49)&…

腾讯又一平台即将停止运营

随着腾讯公司业务和战略的调整,某些业务逐渐退出历史舞台,如“腾讯直播平台NOW”,以及“QQ签到”,“腾讯待办”,“企鹅FM音频平台”等,最近又有一则重磅消息,那就是“腾讯课堂”也即将停止运营。…

类似评论、省市区这种具有层次结构的数据表怎么设计?

业务功能模块 评论、回复模块省市区表 设置一个给每个数据设置一个parent_id 例如: 某个视频下a写了条评论,那a的parent_id就是0;b回复了a,那b的parent_id就是a的id;c回复了b,那c的parent_id就是b的id; 这样,所有评论…

光耦测试项目

CTR 电流传输比 --->输入电流/输出电流(温度越高差值越小) IOL 低电平输出电流 --->输出的电流 VOL 低电平输出电压 --->输出的电压 ITH 输入阈值电流 --->vcc给电压,输入给电流(缓慢升高),输出设置电流/电压 IOH…

Mosh|初学者 SQL 教程

sql文件链接:链接: https://pan.baidu.com/s/1okjsgssdxMkfKf8FEos7DA?pwdf9a9 提取码: f9a9 在mysql workbench 导入 create_databases.sql 文件,下面是运行成功的界面 快捷方式:全部运行可以同时按下controlcommandenter ,或者…

ceph存储

1 存储简介 存储的三种方式包括:块存储、文件存储、对象存储1。此外,还有内存存储、硬盘存储和闪存存储2。 内存存储:临时性数据存储方式,存储速度快,容量有限,通常用来存储正在使用的程序和数据。硬盘存…

配置管理新纪元:Eureka引领分布式服务配置潮流

配置管理新纪元:Eureka引领分布式服务配置潮流 引言 在微服务架构中,服务配置的管理是一项复杂而关键的任务。随着服务数量的增加,传统的集中式配置管理逐渐显得力不从心。Eureka,作为Netflix开源的服务发现框架,提供…

【通信协议】八、CDL(Caterpillar Data Link)协议解析

1、协议简介 CDL(Caterpillar Data Link)是caterpillar的通信协议,该品牌发动机ECM与各控制单元进行通信时,采用基于RS-485的物理层规范进行开发的CDL协议进行通信; 2、物理层 信号传输方式:差分信号(通过两条线的电…