首页 > 编程语言 >python之数据读取

python之数据读取

时间:2024-04-04 20:58:31浏览次数:30  
标签:文件 读取 python data JSON CSV 数据

在Python中,你可以使用各种库和方法来读取数据,具体取决于数据的类型和格式。以下是一些常用的方法:

目录

1.内置的open()函数:

2.csv模块:

这里补充介绍一下csv文件:

优点:

缺点:

csv文件的读写方法:

3.使用pandas库:

读取数据

DataFrame和Series:

DataFrame:

Series:

4.使用numpy库:

5.使用json模块:

JSON格式的文件:

读取JSON文件

6.使用pickle模块:


1.内置的open()函数

当使用内置的open()函数时,你可以通过指定文件的路径和模式来打开文件。模式参数指定了文件的打开模式,包括读取('r')、写入('w')、追加('a')等

#打开文件,如果文件不存在会抛出异常
with open('C:\\Users\\zxr\\Desktop\\file.txt', 'r') as f:
    data = f.read()#读取文件类容
    print(data)#打印文件类容 
'''
在上面的示例中,'C:\\Users\\zxr\\Desktop\\file.txt'是文件的路径,
'r'表示以只读模式打开文件。打开文件后,可以使用read()方法读取文件的
全部内容。使用with语句可以确保在退出with块后自动关闭文件,即使在读取
或处理文件时发生错误也能保证文件被正确关闭。

这里解释一下这个路劲的问题,我这里使用的是'\\'而不是'\'是因为单个的'\'
在Python被解释为转义字符,有可能会发生问题,而'\\'可以消除这个问题,
这个的意思就是只认为为单个的'\'。
'''

#一行一行的读取有效地处理大文件,因为它一次只读取一行,而不会将整个文件加载到内存中。
with open('C:\\Users\\zxr\\Desktop\\file.txt', 'r') as f:
    # 逐行读取文件内容
    for line in f:
        print(line.strip())  # strip()函数用于去除行末的换行符

#简单的介绍一下写入
'''
使用写入模式打开文件时,如果文件不存在,则会创建新文件;如果文件已经存在,
则会覆盖原有内容。可以使用write()方法写入数据到文件中。
'''
with open('file.txt', 'w') as file:
    file.write('Hello, world!\n')
    file.write('This is a new line.')

#简单介绍一下追加
'''
使用追加模式打开文件时,如果文件不存在,则会创建新文件;如果文件已经存在,
则会在文件末尾追加内容。也是用的write()方法
'''
with open('file.txt', 'a') as file:
    file.write('\nThis is a new line.')

2.csv模块:

适用于读取和写入CSV格式的文件.

这里补充介绍一下csv文件:

CSV(逗号分隔值)是一种常见的文本文件格式,用于存储表格数据。在CSV文件中,每行代表表格中的一行数据,而每个字段(或列)则使用逗号或其他分隔符(如分号、制表符等)进行分隔。CSV文件通常以.csv为扩展名。

优点
  1. 简单易懂:CSV文件是一种纯文本格式,易于理解和处理,不需要特殊的软件或工具。

  2. 通用性:几乎所有的电子表格软件(如Microsoft Excel、Google Sheets等)都支持导入和导出CSV文件,因此CSV文件具有广泛的应用范围。

  3. 轻量级:由于是纯文本格式,CSV文件通常比其他电子表格格式(如Excel文件)更小,占用更少的存储空间。

  4. 跨平台性:CSV文件可以在不同操作系统之间轻松共享和传输,不受特定操作系统的限制。

缺点
  1. 不支持复杂数据类型:CSV文件只能存储简单的表格数据,不支持复杂的数据结构(如嵌套列表、字典等),因此不适用于存储结构化数据。

  2. 不适合大规模数据:由于CSV文件是纯文本格式,处理大规模数据时可能效率较低,不如数据库等其他数据存储方式高效。

  3. 不支持元数据:CSV文件不包含元数据信息(如列名、数据类型等),因此在处理文件时需要额外的信息来解释数据的含义。

总的来说,CSV文件是一种简单、通用的数据存储格式,适用于小规模、简单的数据存储和交换场景。但对于复杂、大规模的数据,以及需要支持更丰富数据结构和元数据的情况,可能需要选择其他更适合的数据存储方式。

csv文件的读写方法:
import csv
# 写入CSV文件,没有就创建
data = [
    ['Name', 'Age', 'City'],
    ['John', 30, 'New York'],
    ['Alice', 25, 'Los Angeles'],
    ['Bob', 35, 'Chicago']
]
#newline=''是为了处理不同操作系统下的换行符问题。
with open('C:\\users\\zxr\\Desktop\\file.csv', 'w', newline='') as csvfile:
    csv_w = csv.writer(csvfile)#创建一个CSV写入器对象,该对象将与打开的文件对象csvfile相关联。
    for row in data:
        csv_w.writerow(row)#.writerow()方法将每一行作为参数传递,并在CSV文件中写入这一行数据。

# 读取CSV文件
with open('C:\\users\\zxr\\Desktop\\file.csv', 'r', newline='') as csvfile:
    csv_r = csv.reader(csvfile)
    for row in csv_r:
        print(row)

3.使用pandas

适用于处理结构化数据,如CSV、Excel、SQL数据库等,这个非常的实用,python处理数据不可或缺的库,这里先简单介绍一下,等到后面马上就是它的使用。

读取数据
import pandas as pd
import sqlite3

# 读取CSV文件
data = pd.read_csv('file.csv')
'''
read_csv()函数用于读取CSV文件,并返回一个DataFrame对象。它有许多可选参数,例如:

sep:指定分隔符,默认为逗号。
header:指定行数用来作为列名,如果没有指定,默认为0。
index_col:指定某列作为行索引。
usecols:指定需要读取的列。
dtype:指定每列的数据类型。
parse_dates:指定需要解析为日期时间的列。
'''
# 读取Excel文件
data = pd.read_excel('file.xlsx')
'''
read_excel()函数用于读取Excel文件,并返回一个DataFrame对象。它也有一些可选参数,例如:

sheet_name:指定要读取的工作表名称或索引,默认为0。
header:指定行数用来作为列名,如果没有指定,默认为0。
index_col:指定某列作为行索引。
usecols:指定需要读取的列。
dtype:指定每列的数据类型。
parse_dates:指定需要解析为日期时间的列
'''

# 连接到数据库
connection = sqlite3.connect('database.db')
# 从SQL数据库读取数据
data = pd.read_sql('SELECT * FROM table', connection)
'''
read_sql()函数用于从SQL数据库中读取数据,并返回一个DataFrame对象。它有两个必需参数:

第一个参数是SQL查询语句,用于指定要读取的数据。
第二个参数是数据库连接对象,用于连接到数据库。
此外,read_sql()函数也支持其他一些可选参数,例如:

index_col:指定某列作为行索引。
params:传递给SQL查询语句的参数。
coerce_float:将所有数字类型强制转换为浮点数。
'''
DataFrameSeries:

DataFrameSeriespandas库中两个核心的数据结构,用于处理结构化数据。它们提供了丰富的功能和方法,使得数据的处理、分析和可视化变得更加简单和高效。

DataFrame:

DataFrame是一个二维标记的数据结构,类似于电子表格或SQL数据库中的表格,每列可以有不同的数据类型。你可以将DataFrame看作是一个由多个Series对象组成的字典。DataFrame中的每一列都是一个Series对象,而DataFrame本身可以被看作是由这些列构成的字典。

DataFrame的特点包括:

  • 二维数据结构,类似于电子表格。
  • 可以容纳不同类型的数据。
  • 有行索引和列索引,可以通过这些索引对数据进行访问和操作。
  • 提供了丰富的方法和函数用于数据操作、清洗、转换和分析。
Series:

Seriespandas库中的一维标记的数组结构,类似于Python中的列表或数组。它由一组数据和一组与之相关的索引组成,可以包含不同类型的数据。Series可以看作是DataFrame中的一列或一行数据。

Series的特点包括:

  • 一维数据结构,类似于数组或列表。
  • 拥有索引,可以对数据进行标记和访问。
  • 可以容纳不同类型的数据。
  • 提供了丰富的方法和函数用于数据操作和分析。

通过DataFrameSeries,你可以方便地处理各种结构化数据,包括读取、操作、转换、分析和可视化。这两个数据结构是pandas库的核心,为数据科学和数据分析提供了强大的工具。

4.使用numpy

用于处理数值数据,可以读取文本文件、二进制文件等

import numpy as np

# 读取文本文件
data = np.loadtxt('data.txt', delimiter=' ', skiprows=1)
#skiprows=1跳过文本文件的第一行,可以不写,看个人
#delimiter=' ',是选择以什么分割读取,默认为空格,可以不写
'''
在numpy中,当使用loadtxt()函数加载数据时,如果数据文件中包含有小数点,
则默认情况下会将数据解释为浮点数。这意味着,即使数据文件中没有小数点,
numpy也会将整数数据解释为浮点数,并在打印时显示小数点。
'''
# 打印数据
print("Data:")
print(data)
# 打印数据,将浮点数格式化为整数:print(data.astype(int))

# 将数组保存到文本文件
np.savetxt('output.txt', data)

# 将数组保存到二进制文件
np.save('output.npy', data)

除了loadtxt()函数之外,numpy库还提供了其他用于读取文件的函数,例如genfromtxt()、fromfile()等。这些函数在处理不同格式的文件时可能更加灵活。

'''
loadtxt() 函数:
用于从文本文件中加载数据,并返回一个numpy数组对象。
默认情况下,假设数据是由空格分隔的,但可以通过设置 delimiter 参数来指定其他分隔符。

genfromtxt() 函数:
与 loadtxt() 类似,用于从文本文件中加载数据。
genfromtxt() 函数更加灵活,可以处理缺失值和不同数据类型。
与 loadtxt() 不同,genfromtxt() 可以自动推断数据类型,并且可以处理缺失值,以及跳过
标题行等。

fromfile() 函数:
从文件中读取数据,并将其存储在numpy数组中。
与 loadtxt() 和 genfromtxt() 不同,fromfile() 函数不会自动处理分隔符或缺失值,它
只是将文件中的内容加载到数组中。

这些函数在处理不同格式的文件时提供了不同的灵活性和功能。通常情况下,如果你的数据是简
单的文本文件,且格式较为规范,可以使用 loadtxt() 函数。如果数据中存在缺失值或者数据
类型不一致,可以考虑使用 genfromtxt() 函数。而如果你需要更多的控制权,可以使用 
fromfile() 函数。
'''

5.使用json模块

适用于读取JSON格式的文件

JSON格式的文件:

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它是一种文本格式,易于阅读和编写,同时也易于机器解析和生成。JSON格式常用于Web应用程序之间的数据交换,也被广泛用于配置文件和存储数据。

JSON格式具有以下特点:

  1. 基于键值对的结构:JSON数据由键值对构成,键和值之间使用冒号分隔,键值对之间使用逗号分隔,整个数据被包含在花括号 {} 中。

  2. 支持多种数据类型:JSON支持多种数据类型,包括字符串、数字、布尔值、数组、对象和null值。这些数据类型可以嵌套组合使用,从而构建复杂的数据结构。

  3. 简洁清晰:JSON的语法简洁清晰,易于理解和编写,因此很受开发者的欢迎。它不像XML那样繁琐,可以快速处理和解析。

  4. 与多种编程语言兼容:JSON是一种独立于编程语言的数据格式,因此可以被多种编程语言支持和解析。几乎所有现代编程语言都有用于解析和生成JSON的库或模块。

  5. 易于扩展:JSON格式是一种灵活的数据交换格式,可以根据需要轻松扩展和定制,使其适应不同的应用场景。

  6. JSON文件通常以.json作为文件扩展名,内容是符合JSON格式的数据。以下是一个简单的JSON示:

{
  "name": "John",
  "age": 30,
  "is_student": false,
  "address": {
    "city": "New York",
    "zipcode": "10001"
  },
  "skills": ["Python", "JavaScript", "SQL"]
}

在这个JSON示例中,有一个名为name的字符串键值对、一个名为age的数字键值对、一个名为is_student的布尔键值对、一个名为address的对象键值对、一个名为skills的数组键值对。这个JSON数据描述了一个人的基本信息,包括姓名、年龄、是否是学生、地址和技能等。

读取JSON文件
import json

# 读取 JSON 文件
with open('data.json', 'r') as f:
    data = json.load(f)#使用 json.load() 函数加载 JSON 文件的内容,并将其存储在变量 data 中

# 打印数据
print(data)

6.使用pickle模块

用于读取Python对象的二进制表示,通常用于保存和加载模型、变量等:

import pickle

# 定义一个 Python 对象
data = {'name': 'John', 'age': 30, 'city': 'New York'}

# 将对象保存到文件中
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

# 从文件中加载对象
with open('data.pkl', 'rb') as f:
    loaded_data = pickle.load(f)

# 打印加载的对象
print(loaded_data)

使用 pickle 模块可以方便地保存和加载 Python 对象,常用于保存和加载模型、变量等,具有很高的灵活性和通用性。但需要注意的是,由于 pickle 格式是 Python 特有的,因此保存的对象可能无法被其他编程语言解析。

标签:文件,读取,python,data,JSON,CSV,数据
From: https://blog.csdn.net/m0_63216336/article/details/137231426

相关文章

  • springboot security对接mysql数据库
    首先要添加springbootsecurity依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>3.2.4</version></dependenc......
  • 设计定时任务实现数据同步的最佳实践
     ✨✨祝屏幕前的您天天开心,每天都有好运相伴。我们一起加油!✨✨  ......
  • 爱心代码Python
    importrandomfromtkinterimport*frommathimportsin,cos,pi,logfor_inrange(520):x,y=random.choice(point_list)x,y=scatter_inside(x,y,0.17)self._center_diffusion_points.add((x,y))heart_halo_point=set()for_inrange(halo_number):t......
  • 基于springboot+JavaWeb技术的在线考试系统源码数据库
    基于JavaWeb技术的在线考试系统设计与实现摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于JavaWeb技术的在线考试系统设计与实现的开发全过程。通过分析基于JavaWeb技术的在线考试系统设计与实现管理的不足,创建了一......
  • 基于深度学习的危险物品检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入探讨了基于YOLOv8/v7/v6/v5的危险物品检测技术。核心采用YOLOv8技术并整合了YOLOv7、YOLOv6、YOLOv5的算法,进行了细致的性能指标对比分析。我们详细介绍了国内外在危险物品检测方面的研究现状、数据集处理方法、算法原理、模型构建与训练代码,以及基于Streamlit的交互......
  • python项目练习——14.学生管理系统
    这个项目可以让用户管理学生的信息,包括学生的姓名、年龄、成绩等,并提供添加、编辑、删除、查询等功能。这个项目涉及到数据库操作、用户界面设计、数据验证等方面的技术。代码示例:importtkinterastk #导入Tkinter库importsqlite3 #导入sqlite3库classStude......
  • 基于深度学习的水果品质检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5的水果品质检测,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头......
  • 基于深度学习的水果新鲜程度检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:在本博客中,我们深入探讨了基于YOLOv8/v7/v6/v5的水果新鲜程度检测系统。核心上,本系统采用YOLOv8技术并集成了YOLOv7、YOLOv6、YOLOv5的算法,以便进行性能指标的全面对比。文章详细介绍了国内外在此领域的研究现状、如何处理数据集、算法的基本原理、模型的构建与训练过程,并展示......
  • 数据结构——从入门到飞升——两个有序链表的交集
    题目:已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有......
  • Python - arxiv
    arxiv文章目录arxiv一、关于arxiv.py安装二、使用示例1、获取结果2、下载papers3、自定义client获取结果4、日志三、类型说明1、Client2、Search3、Result一、关于arxiv.pygithub:https://github.com/lukasschwab/arxiv.pyarxiv.py是arXivAPI的......