python之数据读取

在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 特有的,因此保存的对象可能无法被其他编程语言解析。

  • 41
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值