使用Python进行数据分析,往往会从各类文件中读取数据,本节我们介绍使用Python从各类文件中读取数据的方法。注意,在介绍读取文件的程序时,使用了Python的数据分析相关库,如NumPy、Pandas等,这些库会在后续章节中详细介绍,本节读者只需了解如何在程序中使用它们即可。
有时候数据是以CSV形式存储的,要处理数据需要先进行读取操作。以下为CSV文件的读取方法(基于Python)。
利用NumPy读取CSV文件的代码如下:
# 导入numpy库,并简写为np import numpy as np # 从指定路径的CSV文件中读取数据,使用逗号作为分隔符,跳过前n行,仅读取第2列和第3列的数 据,并将结果存储在变量data中 data = np.loadtxt(open("路径.csv", "rb"), delimiter=",", skiprows=n, usecols=[2, 3])
其中,delimiter是分隔符;skiprows是跳过前n行;usecols是读取的列数,例子中读取的是第3、第4列。
利用Pandas读取CSV文件的代码如下:
# 导入pandas库,并简写为pd import pandas as pd # 读取CSV文件,指定分隔符为逗号,自动推断表头,仅使用第6列数据其中:sep相当于delimiter, 是分隔符,而这个函数中也包含分隔符,它属于备用的分隔符(csv用不同的分隔符分隔数据),header是 列名,是每一列的名字,如果header=1,将会以第二行作为列名,读取第二行以下的数据,usecols是读 取第几列。 data = pd.read_csv(r'C:\Users\lenovo\Desktop\parttest.csv', sep=',', header='infer', usecols=[5])
其中,sep相当于delimiter,是分隔符,而这个函数中也包含分隔符,它属于备用的分隔符(csv用不同的分隔符分隔数据),header是列名,是每一列的名字,如果header=1,将会以第二行作为列名,读取第二行以下的数据,usecols是读取第几列。
值得注意的是,如果我们查看某个值,使用print(data[1])是会报错的。如果想要读取全部数据,则可以使用如下代码:
array=data.values[0::,0::] # 读取全部行、全部列 print(array[]) # array是数组形式存储,顺序与data读取的数据顺序格式相同
利用Python I/O读取CSV文件的代码如下:
import csv filename='C:\\Users\\lenovo\\Desktop\\parttest.csv' data = [] with open(filename) as csvfile: csv_reader = csv.reader(csvfile) # 使用csv.reader读取csvfile中的文件 header = next(csv_reader) # 读取第一行每一列的标题 for row in csv_reader: # 将csv 文件中的数据保存到data中 data.append(row[5]) # 选择某一列加入data数组中 print(data)
或者使用DictReader,即第一行作为标签,代码如下:
import csv with open(filename) as csvfile: reader = csv.DictReader(csvfile) column = [row['weight'] for row in reader] # weight 同列的数据 print(column)
JSON(JavaScript Object Notation,Java Script对象表示法)是一种轻量级的数据交换格式,是基于ECMAScript的一个子集。使用Python操作JSON文件,主要有两种方法:一是load()方法,用于读取JSON文件;二是dump()方法,用于写入JSON文件。
读取JSON文件的代码如下:
import json # 导入json模块 with open('results_font.json', 'r', encoding='utf-8') as f: # 以只读模式打开名 为'results_font.json'的文件,编码为'utf-8' a = json.load(f) # 使用json模块的load函数将文件内容解析为Python对象,并将结果 赋值给变量a
或者使用load()方法,代码如下:
import mmcv # 导入mmcv库 # 使用mmcv库的load函数加载名为'result.json'的文件,并将结果赋值给变量a a = mmcv.load('result.json')
写入JSON文件的代码如下:
# 定义一个字典a,包含姓名、ID和爱好信息 a = { "name": "dabao", "id": 123, "hobby": { "sport": "basketball", "book": "python study" } } # 将字典a转换为JSON格式的字符串 b = json.dumps(a) # 打开一个名为'new_json.json'的文件,以写入模式 f2 = open('new_json.json', 'w') # 将JSON格式的字符串写入文件 f2.write(b) # 关闭文件 f2.close()
Python也可以读取数据库中储存的数据,下面将以Python读取MySQL数据库中的数据为例,向读者进行介绍。
首先安装读取MySQL的第三方库PyMySQL,命令如下:
pip install pymysql
安装成功后,传入一个.py文件,代码如下:
import pymysql #连接数据库 link=pymysql.connect( host = '127.0.0.1' # 连接本地默认地址,127.0.0.1 ,user = 'root' # 用户名 ,passwd='******' # 密码 ,port= 3306 # 端口,默认为3306 ,db='studentdb' # 数据库名称 ,charset='utf8' # 字符编码 ) cur = link.cursor() # 生成游标对象 sql="SELECT * FROM Student " # 写SQL语句 cur.execute(sql) # 执行SQL语句 data = cur.fetchall() # 通过fetchall方法获得数据 for i in data: # 循环遍历拿到数据 print (i) cur.close() # 关闭游标 link.close() # 关闭连接
读取到的数据内容如图1.1所示。
图1.1 读取到的数据内容
存储在数据库中的表文件如图1.2所示。
图1.2 存储在数据库中的表文件
一般保存数据的方式有如下几种:
● 文件:TXT、CSV、Excel、JSON等,保存的数据量小。
● 关系型数据库:MySQL、Oracle等,保存的数据量大。
● 非关系型数据库:MongoDB、Redis等,以键值对形式存储数据,保存数据量大。
● 二进制文件:保存爬取的图片、视频、音频等格式数据。
保存数据的方法主要有以下几种:
(1)使用open()方法写入文件。
(2)保存数据到文件,写入列表或者元组数据:创建writer对象,使用writerow()方法写入一行数据,使用writerows()方法写入多行数据。写入字典数据:创建DictWriter对象,使用writerow()方法写入一行数据,使用writerows()方法写入多行数据。
(3)使用Pandas保存数据。Pandas支持多种文件格式的读写,最常用的就是CSV和Excel数据的操作。因为直接读取的数据是数据框格式,所以Pandas在爬虫、数据分析中使用非常广泛。一般将爬取到的数据存储为DataFrame对象(DataFrame是一个表格或者类似二维数组的结构,它的各行表示一个实例,各列表示一个变量)。
(4)保存到数据库。首先以二进制方打开文件,然后读取文件,把读取的二进制内容保存到数据库中。
首先,需要安装pymysql库,可以使用以下命令安装:
pip install pymysql
然后,使用以下代码将读取的内容保存到MySQL数据库中:
import pymysql # 连接到MySQL数据库 conn = pymysql.connect(host='localhost', user='your_username', password='your_password', db='your_database', charset='utf8') cursor = conn.cursor() # 读取文件内容 with open(filePath[0], 'rb') as f: ss = f.read() # 将文件内容插入数据库中 sql = "INSERT INTO your_table (column_name) VALUES (%s)" cursor.execute(sql, (ss,)) conn.commit() # 关闭数据库连接 cursor.close() conn.close()
在实际操作中,请将your_username、your_password、your_database、your_table和column_name替换为实际的数据库信息。