Python文件操作(txt + xls + json)

news2024/11/25 21:41:48

文章目录

  • 简介
  • 1、使用with_open读取和保存:.txt + .bin(二进制文本)
    • 1.1、with open语句详解
    • 1.1、项目实战
  • 2、使用pandas读取和保存:.xls + .xlsx
    • 2.1、pandas简介
    • 2.2、环境配置
    • 2.3、项目实战
  • 3、 使用json.dump读取和保存:.json
    • 3.1、json格式
    • 3.2、项目实战
  • 4、打开对话框
    • (1)打开文件选择对话框
    • (2)打开文件夹选择对话框
    • (3)判断路径 / 文件夹 / 文件是否存在
  • 5、统计时间
    • 5.1、计算运行时间
    • 5.2、获取当前时间

简介

Python文件操作是处理文件和目录的重要组成部分。文件操作允许您创建、打开、读取、写入、修改和删除文件。这是Python编程中常见的任务之一,对于处理数据、配置文件、日志记录等等非常有用。

使用Python的内置库和第三方库进行文件操作:
(1)TXT文件
(2)Excel文件
(3)JSON文件

1、使用with_open读取和保存:.txt + .bin(二进制文本)

1.1、with open语句详解

函数功能:with open语句是Python中一种处理文件的方式。通过使用with语句,可以确保在退出代码块时文件会被正确关闭,避免资源泄漏。
函数说明:with open(file_path, mode) as file:
输入参数:
		(1)file_path:要打开的文件路径。
		(2)mode:文件模式,指定文件在打开时的操作。可以是以下之一:
				"r":	读取模式。用于打开文件并读取内容。
				"w":	写入模式。用于打开文件并写入内容。
								 备注:如果文件已存在,会清空文件内容。如果文件不存在,则创建一个新文件。
				"a":	追加模式。用于打开文件并在文件末尾追加内容。
								 备注:如果文件不存在,则创建一个新文件。
				"rb":	以二进制读取模式打开文件。
				"wb":	以二进制写入模式打开文件。
				"ab":	以二进制追加模式打开文件。

1.1、项目实战

with open('file.txt', 'r') as file:
    content = file.read()  # 读取文本文件
# 文件在这里会自动关闭


with open('file.txt', 'w') as file:
    file.write('Hello, World!')  # 写入文本文件
# 文件在这里会自动关闭
with open('binary_file.bin', 'rb') as file:
    binary_data = file.read()  # 读取二进制文件
# 文件在这里会自动关闭


with open('binary_file.bin', 'wb') as file:
    file.write(b'\x01\x02\x03')  # 写入二进制文件
# 文件在这里会自动关闭

2、使用pandas读取和保存:.xls + .xlsx

2.1、pandas简介

pandas(Python Data Analysis Library)是一个强大的开源数据分析和处理库,它为Python编程语言提供了高性能、易于使用的数据结构和数据分析工具。pandas通常与NumPy和Matplotlib等库一起使用,用于数据清洗、转换、分析和可视化。

  • 数据结构:(1)Series:是一个带标签的一维数组,可以容纳任何数据类型。它由一组数据和与之相关的标签(索引)组成。(2)DataFrame:是一个二维的表格型数据结构,可以容纳多种类型的数据。它类似于电子表格或 SQL 表,具有行和列。
  • 数据导入和导出:Pandas 可以轻松导入和导出多种数据格式,包括 CSV、Excel、SQL 数据库、JSON、HTML、Parquet、HDF5 等。示例:pd.read_csv(), pd.read_excel(), df.to_csv(), df.to_excel(), 等等。
  • 数据清洗和处理:Pandas 允许你删除重复值、处理缺失值、过滤数据、合并和连接数据、排序和分组数据。示例:df.drop_duplicates(), df.dropna(), df.fillna(), df.groupby(), df.pivot_table(), 等等。
  • 数据索引和选择:可以使用标签或位置来选择特定的数据行或列。Pandas 提供了多种索引和切片的方式。示例:df['列名'], df.loc[], df.iloc[], df.loc[], 等等。
  • 数据计算和聚合:Pandas 提供了丰富的数据计算和聚合功能,包括求和、平均值、计数、最大值、最小值、分位数等等。示例:df.mean(), df.sum(), df.max(), df.min(), df.describe(), 等等。
  • 数据可视化:Pandas 可以与其他 Python 可视化库(如 Matplotlib 和 Seaborn)结合使用,用于绘制数据图表。示例:df.plot(), df.hist(), df.boxplot(), sns.pairplot(), 等等。
  • 时间序列分析:Pandas 对时间序列数据有很好的支持,可以轻松处理日期和时间数据。示例:pd.to_datetime(), df.resample(), df.rolling(), 等等。
  • 高性能:Pandas 针对大数据集的处理进行了优化,可以高效地处理大规模数据。

2.2、环境配置

  • pip install pandas
  • pip install xlrd
  • pip install openpyxl

(1)pandas的read_excel()函数依赖于 xlrd 库来实现读取.xls格式的Excel文件,因此需要安装并导入xlrd库。
(2)pandas的to_excel()函数依赖于 openpyxl 库来实现将DataFrame对象保存.xlsx格式的Excel文件,因此需要安装并导入openpyxl库。

  • xlrd 是一个用于读取 Excel 文件的库,它提供了许多功能来处理 Excel 文件,包括读取单元格内容、处理日期、数字和文本等。使用 xlrd.open_workbook() 函数可以打开 Excel 文件,并使用工作簿、工作表对象来访问数据。
  • openpyxl 是一个用于读取和写入 Excel 文件的库,它提供了更多的灵活性和功能,包括读取和修改单元格内容、样式和图表等。使用 openpyxl.load_workbook() 函数可以打开 Excel 文件,并使用工作簿、工作表对象来访问数据。

2.3、项目实战

import os
import pandas as pd

"""读取xls数据"""
excel_file_path = os.getcwd() + r'\rgb.xls'
# 使用 header 参数指定要跳过的行数,通常跳过第一行(表头),默认 header=0
df = pd.read_excel(excel_file_path, header=None)
# 提取第一列和第二列数据并转换为列表
gray_value = df.iloc[:, 0].tolist()  # 提取第一列数据并转换为列表
name_value = df.iloc[:, 1].tolist()  # 提取第二列数据并转换为列表
rgb_value = df.iloc[:, 2:5].values.tolist()  # 提取第三到四列数据并转换为列表(RGB)

"""数据保存到xls"""
data = [["nii", num, 1]]  # 创建一个包含单行数据的二维数组
df = pd.DataFrame(data, columns=["name", "num", "RGB"])
df.to_excel(self.output_excel_path, index=False, engine='openpyxl')
print(f'Data saved to {self.output_excel_path}')


"""
# 保存三维数组

import pandas as pd
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  			# 示例数组
df = pd.DataFrame(data, columns=["z", "y", "x"])
output_excel_path = "output.xlsx"  					# 替换为您想要保存的文件路径
df.to_excel(output_excel_path, index=False, engine='openpyxl')
print(f'Data saved to {output_excel_path}')
"""

"""在当前的excel数据中添加新数据"""
import pandas as pd
import os
# 检查Excel文件是否已存在
excel_path = folder_path + "/cell_counting/all.xlsx"
if os.path.exists(excel_path):
    df = pd.read_excel(excel_path)   # 如果文件存在,读取现有数据
else:
    df = pd.DataFrame()  # 如果文件不存在,创建一个空的数据框
new_data = {'target_gray': [target_gray], 'cell_num': [cell_num]}
new_df = pd.DataFrame(new_data)  # 添加新的数据到数据框
df = pd.concat([df, new_df], ignore_index=True)
df.to_excel(excel_path, index=False, engine='openpyxl')  # 将更新后的数据框写回Excel文件
print(f'Data has been successfully saved to: {excel_path}')

3、 使用json.dump读取和保存:.json

3.1、json格式

JSON(JavaScript Object Notation)是一种轻量级的用于数据存储和交换的文本格式。最初由Douglas Crockford于2001年提出,它基于JavaScript的一个子集,但已经成为一种独立于编程语言的数据格式。

JSON的主要特点:

  • 可读性:采用类似于字典或映射的 " 键-值对 " 方式来表示数据。
  • 支持多种数据结构:包括字符串、数字、布尔值、数组、对象(也叫字典或映射)和null。这些数据类型可以嵌套组合,以表示复杂的数据结构。
  • 支持跨平台交互JSON是一种独立于编程语言的数据格式,可以在不同的编程语言中进行解析和生成。这使得它成为不同系统和应用程序之间进行数据交换的理想选择。
  • 轻量级:JSON的语法非常简洁,没有繁杂的标记或语法,这使得它在网络传输中占用的带宽较少。
  • 易于解析:JSON数据可以通过各种编程语言中的解析器快速解析为内部数据结构,使得应用程序能够轻松地操作JSON数据。
  • 支持添加注释:虽然JSON规范中并没有官方支持注释的语法,但一些JSON解析器允许在数据中包含注释,这对于文档和配置文件非常有用。
# 字符串、数字、布尔值、数组、对象
data = {
    "name": "John Doe",							
    "age": 30,
    "isStudent": False,
    "courses": ["Math", "Science", "History"],
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "zipCode": "12345"
    }
}

3.2、项目实战

  • 方法一:使用with语句的好处是,它会在代码块执行完毕后自动关闭文件。这确保了文件在使用完后被正确关闭,不会造成资源泄漏。在with语句块结束时,文件会自动被关闭,而不需要显式调用close()方法。
import json

json_file_path = "/coordinates.json"
with open(json_file_path, 'w') as json_file:  # 打开json文件
    # 在这个代码块中,json_file处于打开状态
    data = {'Z_line': Z_line,
            'Y_line': Y_line,
            'X_line': X_line}
    json.dump(data, json_file, indent=4)  # 填充json文件

# 在这个代码块中,json_file会自动被关闭
  • 方法二:如果使用open()方法来打开文件,需要在文件使用完后显式调用close()方法来关闭文件。如果忘记关闭文件,可能会导致文件句柄泄漏,占用系统资源。
import json

json_file_path = "/coordinates.json"
f = open(json_file_path, 'w')  # 打开json文件
data = {'Z_line': Z_line,
        'Y_line': Y_line,
        'X_line': X_line}
json.dump(data, f, indent=4)  # 填充json文件

f.close()  # 手动关闭文件,确保释放资源。

4、打开对话框

Python本身没有内置的文件夹选择界面。然而,可以使用第三方库来实现在代码中选择文件或文件夹的功能。一个常用的库是tkinter,它是Python的标准GUI库之一,提供了创建简单的图形用户界面的功能。

  • 安装:tkinter是Python的标准库之一,通常已经预装在大多数Python发行版中。如果你的环境中没有安装tkinter,你可能需要安装它。在大多数操作系统上,可以通过命令行运行以下命令来安装tkinter:pip install tkinter
  • 备注:选择文件与文件夹的区别,一个是调用filedialog.askopenfilename(),一个是调用filedialog.askdirectory()

(1)打开文件选择对话框

在这里插入图片描述

import tkinter as tk
from tkinter import filedialog
import os

root = tk.Tk()		# 创建根窗口
root.withdraw()  	# 隐藏根窗口
file_path = filedialog.askopenfilename()		# 打开文件选择对话框
print("Selected file path:", file_path)			# 打印所选文件的路径

file_name = os.path.basename(file_path)                         # 获取文件的名称+后缀
file_name_without_extension = os.path.splitext(file_name)[0]    # 获取文件的名称
file_directory = os.path.dirname(file_path)                     # 获取文件的目录

print("获取文件的名称+后缀:", file_name)
print("获取文件的名称:", file_name_without_extension)
print("获取文件的目录:", file_directory)

"""
Selected file path: D:/Anaconda/_conda.exe
获取文件的名称+后缀:_conda.exe
获取文件的名称:_conda
获取文件的目录:D:/Anaconda
"""

(2)打开文件夹选择对话框

在这里插入图片描述

import tkinter as tk
from tkinter import filedialog

root = tk.Tk()		# 创建根窗口
root.withdraw()  	# 隐藏根窗口
folder_path = filedialog.askdirectory()			# 打开文件夹选择对话框
print("Selected folder path:", folder_path)		# 打印所选文件夹的路径

###########################################################################
import tifffile		# 用于打开.tif格式的图像
# 读取文件夹中的所有tif图像并将它们存储在列表中
image_list = []		# 新建一个空列表
for filename in sorted(os.listdir(folder_path)):				# 列举文件夹中的所有文件 + 排序后遍历。
    if filename.endswith('.tif'):								# 提取以.tif结尾的图像文件。
        image_path = os.path.join(folder_path, filename)		# 将文件名和文件夹路径连接起来,得到完整的图像文件路径image_path
        image = tifffile.imread(image_path)						# 加载tif图像
        image_list.append(image)								# 在列表末尾添加元素

import numpy as np
output_tif_path = "result.tif"
image_stack = np.stack(image_list, axis=0)				# 将图像列表转换为三维数组
labeled_image = image_stack.astype(np.uint8)            # 将数据类型转换为uint8
tifffile.imwrite(output_tif_path, labeled_image)        # 保存图像为TIFF并指定数据类型为uint8

(3)判断路径 / 文件夹 / 文件是否存在

import os

folder_path = os.getcwd() + "/image"
# (1)判断字符串是否存在
if folder_path != "":

    # (2)判断文件夹是否存在(不存在则新建)
    if not os.path.exists(folder_path):
        os.makedirs(folder_path)
        print("文件夹不存在")

    # (3)判断文件是否存在
    image_path = folder_path + "/conda.exe"
    if os.path.exists(image_path):
        print("图像存在")

5、统计时间

5.1、计算运行时间

import time
start_time = time.time()  # 记录开始时间
# ...
end_time = time.time()  # 记录结束时间
runtime = end_time - start_time  # 计算运行时间
print(f"总运行时间: {runtime:.2f} 秒")

"""
import time
start_time = time.time()  # 记录开始时间

print(f"总运行时间: {time.time() - start_time:.2f} 秒")  # 打印运行时间
"""

5.2、获取当前时间

import time
current_timestamp = time.time()
print("获取当前时间戳:", current_timestamp)
"""
#####################################################################
时间戳: 表示从某个特定时间点(通常是"Unix纪元",即1970年1月1日00:00:00 UTC)到特定日期时间的秒数,包括小数部分表示毫秒或微秒。
#####################################################################
获取当前时间戳: 1698040970.5602446 表示距离1970年1月1日00:00:00 UTC已经过去了大约 1698040970 秒和约 560 毫秒以及 2446 微秒。
"""

from datetime import datetime
print("获取当前日期和时间:", datetime.now())
print("只日期格式:", datetime.now().date())
print("只时间格式:", datetime.now().time())
print("自定义格式:", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
"""
获取当前日期和时间: 2023-10-23 14:02:50.560244 表示2023年10月23日下午14点2分50秒零点五百六十四微秒
#####################################################################
只日期格式: 2023-10-23
只时间格式: 14:02:50.560244
自定义格式: 2023-10-23 14:02:50
"""

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

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

相关文章

MS8091/2运算放大器可Pin to Pin兼容AD8091/2

MS809x 系列是一种易用的、低成本的轨到轨输出电压反馈放大器,它具有典型的电流反馈放大器带宽和转换率的优势,同时也有较大的共模电压输入范围和输出摆幅,这使它很容易在单电源 2.5V 的低压情况下工作。可Pin to Pin兼容AD8091/AD8092。 虽然…

速达软件任意文件上传漏洞复现

简介 速达软件专注中小企业管理软件,产品涵盖进销存软件,财务软件,ERP软件,CRM系统,项目管理软件,OA系统,仓库管理软件等,是中小企业管理市场的佼佼者,提供产品、技术、服务等信息,百万企业共同选择。速达软件全系产品存在任意文件上传漏洞,未经身份认证得攻击者可以通过此漏…

Android渲染-AHardwareBuffer

本文主要从应用的角度介绍android的native层AHardwareBuffer创建纹理以及保存渲染数据。 HardwareBuffer 要介绍native层的AHardwareBuffer,就需要先从Java层的HardwareBuffer说起。Android官方对于HardwareBuffer介绍如下: HardwareBuffer wraps a na…

中国科技巨头:集体变革中 /华为鸿蒙 4:功能、模型、生态三大升级 |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件🔥,更新AIGC的最新动态,生成相应的魔法简报,节省阅读时间👻 🔥资讯预览 中国科技巨头:集体变革中 华为鸿蒙 4:功能、模型、生…

宁夏一男子吸烟“逼”慢高铁 拘留7天 AI技术如何提升公共安全

最近,宁夏的一位男子杨某在高铁卫生间吸烟,触发了列车的烟雾报警系统,导致列车降速运行,最终被拘留7天。这个事件凸显了公共安全的重要性,特别是在交通工具上的安全管理。如果我们能够及时发现并阻止这种行为&#xff…

0011Java程序设计-ssm药店管理系统微信小程序

文章目录 摘 要目 录系统实现5.2服务端开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅🐧裙:776871563 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机…

互联网医院|北京互联网医院系统开发功能

打造移动互联网医院,就是,通过移动互联网将医院与患者、医院内部(医生、护士、领导层)、医院与生态链上的各类组织机构连接起来。以患者为中心,优化医院业务流程,提升医疗服务质量与医院资源能效&#xff0…

SQL Server数据库的备份和还原

6.2 SQL Server备份和还原 数据库管理员最担心的情况就是数据库瘫痪,造成数据丢失,而备份作为数据的副本,可以有 效地保护和恢复数据。本节将介绍数据备份的原因,备份的方式.SOL Server的恢复模式.以及备 份策略和备份设备。 6.2…

KubeSphere Marketpalce 上新!Databend Playground 助力快速启动数据分析环境

12 月 5 日,Databend Labs 旗下 Databend Playground(社区尝鲜版)成功上架青云科技旗下 KubeSphere Marketplace 云原生应用扩展市场,为用户提供一个快速学习和验证 Databend 解决方案的实验环境。 关于 Databend Playground Dat…

视频集中存储/智能分析融合云平台EasyCVR平台接入rtsp,突然断流是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

销售如何开发客户?

在销售过程中,开发客户是至关重要的一环。只有拥有足够的客户群体,才能为公司带来更多的业务机会和收入。 现如今,不管是哪一行竞争都十分激烈,特别是那些本身没有核心竞争力和核心技术的传统 to b企业,正处于十分尴尬…

输入一个月份,告知这个月份属于哪个季节的

一、输入特点 使用switch语句,属于月份的数字;如果和月份的数字没有关系则会显示【你的输入有错误!】。 二、输入代码 import java.util.Scanner; public class judgeSeasonDemo {public static void main(String[] args){try (Scanner s…

Linux | tar,bc,uname指令

Linux | tar,bc, 文章目录 Linux | tar,bc,tar指令【重要】bc指令uname –r指令 tar指令【重要】 tar [-cxtzjvf] 文件与目录 … 参数: -c :建立一个压缩文件的参数指令(create 的意思);-x &am…

网站测试都要测试哪些?如何进行测试?

1 UI测试 看页面是否美观养眼(包括页面的布局是否合理,策划是否舒服美观,页面长度是否合理,前景色与背景色是否搭配,页面风格是否统一,色调是否适合人眼,会不会太刺眼,字体大小是否合适&#x…

科技云报道:AI+PaaS,中国云计算市场迎来新“变量”?

科技云报道原创。 没有小的市场,只有还没有被发现的大生意。 随着企业数字化转型的逐级深入,市场需求进一步向PaaS和SaaS层进发,使之成为公有云服务市场增长的主要动力。 根据IDC最新发布的报告显示,2022-2027五年间中国公有云…

HarmonyOS开发工具DevEco Studio的下载和安装

一、DevEco Studio概述 一、下载安装鸿蒙应用开发工具DevEco Studio 开发鸿蒙应用可以从鸿蒙系统上运行第一个程序Hello World开始。 为了得到这个Hello World,你需要得到这个Hello World的源代码,源代码是用人比较容易看得懂的计算机编程语言规范写的…

私域最全养号攻略---微信

微信号的使用规则: 注册新微信、微信实名认证、主动添加好友、面对面建群、被动添加好友、进群限制、朋友圈限制、好友上限 微信权重加分规则: 基础信息是否完整、注册时间、微信使用行为、 微信权重扣分规则: 使用的环境是否正常、部分行为会…

simulink merge模块使用案例分析

作用:汇总多个信号分支,但最终可根据用户设定条件选择某路分支输出 Enabled Subsystem3 Enabled Subsystem2 分析:可以看到,在1s时刻输出 Enabled Subsystem2的1,在2s时刻输出 Enabled Subsystem3的2。 为方便理解&a…

ComplexHeatmap热图专栏 | 6. 3D热图绘制教程

本期教程 原文链接https://mp.weixin.qq.com/s/EyBs6jn78zOomcTv1aP52g 6 3D热图的绘制教程 基于《热图绘制教程》专栏,本教程已更新了5个章节,不知道大家是否有所收获。对于小杜个人来说,真的需要不断的复习和练习才可以记住,但…

【数据结构】手撕排序

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一、排序的概念及其运用1.1 排序的概念1.2 常见的算法排序 二、 冒泡排序三、直接插入排…