1. read、readline、readlines
(1)open函数
- 如果你想用python读取文件(如txt、csv等),第一步要用open函数打开文件。
- open()是python的内置函数,它会返回一个文件对象,这个文件对象拥有read、readline、write、close等方法。
- open函数有两个参数:
open('file','mode')
-
mode常用的模式:
- r:表示文件只能读取
- w:表示文件只能写入
- a:表示打开文件,在原有内容的基础上追加内容,在末尾写入
- w+:表示可以对文件进行读写双重操作
-
mode参数可以省略不填,默认为r模式
-
mode参数还可以指定以什么样的编码方式读写文本,默认情况下open是以文本形式打开文件的,比如上面的四种mode模式。
-
当你需要以字节(二进制)形式读写文件时,只需要在mode参数中追加'b'即可:
- rb:以二进制格式打开一个文件,用于只读
- wb:以二进制格式打开一个文件,用于只写
- ab:以二进制格式打开一个文件,用于追加
- wb+:以二进制格式打开一个文件,用于读写
-
当在默认模式下读取文本文件时(二进制文件不可以),文件中的换行符会转换为'\n'形式
-
相反,在默认模式下写入文件时,文本中的'\n'会转换为换行符。
-
也就是说,你读取的txt文本,其中换行符会以'\n'形式出现,写入txt文本时,文本中的'\n'会变成换行指令。
-
with 关键字
-
在打开文件时,最好使用 with 关键字。优点是当子句体结束后文件会正确关闭,即使在某个时刻引发了异常。
>>> with open('workfile') as f:
... read_data = f.read()
>>> f.closed
True
(2)close方法
- 打开文件并处理完毕后,需要关闭文件,这里用到close方法。
- f.close() 用来关闭文件并立即释放它使用的所有系统资源。
- 如果你没有显式地关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。
f = open(file) # 打开文件
f.close() # 关闭文件
(3)read方法
-
一次性读取整个文件内容。推荐使用read(size)方法,size越大运行时间越长
-
当使用open函数打开文件后,就可以使用该文件对象的各种方法了,read就是其中一种。
-
read()会读取一些数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。
-
read方法有一个参数:
f.read(size) # f为文件对象
注:参数size(可选)为数字,表示从已打开文件中读取的字节计数,默认情况下为读取全部。
eg:假设有一个文件sample1.txt,内容如下:
This is python big data analysis!
现在读取该文件:
with open('sample1.txt') as f:
content = f.read()
print(content)
f.close()
输出:
This is python big data analysis!
(4)readline方法
- 每次读取一行内容。内存不够时使用,一般不太用
- readline方法从文件中读取整行,包括换行符'\n'。
- 换行符(\n)留在字符串的末尾,如果文件不以换行符结尾,则在文件的最后一行省略,这使得返回值明确无误。
- 如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 '\n' 表示,该字符串只包含一个换行符。
- f.readline()有一个参数:
f.readline(size)
注:参数size表示从文件读取的字节数。
假设有一个文件sample2.txt,共三行,内容如下:
hello,my friends!
This is python big data analysis,
let's study.
要用readline函数读取该文件:
with open('a.txt') as f:
print(f.readline())
print(f.readline(5))
f.close()
输出:
hello,my friends!
This
- readline方法会记住上一个readline函数读取的位置,接着读取下一行。所以当需要遍历文件每一行的时候,可以使用readline方法
(5)readlines方法
- 一次性读取整个文件内容,并按行返回到list,方便我们遍历
- readlines方法和readline方法长得像,但功能不一样,前面说过readline方法只读取一行,readlines方法则是读取所有行,返回的是所有行组成的列表。
- readlines方法没有参数,使用更加简单
依旧以sample2.txt为例
with open('a.txt') as f:
print(f.readlines())
f.close()
输出:
[ 'hello,my friends!\n,'This is python big data analysis,\n',''let's study.\n'']
(6)write方法
- write方法顾名思义,就是将字符串写入到文件里。
- 它只有一个参数:
f.write([str]) # f为文件对象
参数[str]代表要写入的字符串
使用起来也很简单,比如将下面字符串
'hello,my friends!\nthis is python big data analysis'
写入到文件sample3.txt里
with open('sample3.txt','w') as f:
f.write('hello,my friends!\nthis is python big data analysis')
f.close()
输出:
hello,my friends!
This is python big data analysis
2. 内置模块csv
- csv模块读取文件
import csv
with open('test.csv','r') as myFile:
lines=csv.reader(myFile)
for line in lines:
print (line)
- csv模块写入文件
import csv
with open('test.csv','w+') as myFile:
myWriter=csv.writer(myFile)
myWriter.writerow([7,8,9]) # writerow一行一行写入
myWriter.writerow([8,'h','f'])
myList=[[1,2,3],[4,5,6]] # writerows多行写入
myWriter.writerows(myList)
3. numpy库
- loadtxt方法
loadtxt用来读取文本文件(包含txt、csv等)以及.gz 或.bz2格式压缩文件,前提是文件数据每一行必须要有数量相同的值。
import numpy as np
np.loadtxt('test.csv',dtype=str)# loadtxt()中的dtype参数默认设置为float,这里设置为str字符串便于显示
- load方法
load用来读取numpy专用的.npy, .npz 或者pickled持久化文件。
import numpy as np
np.save('test.npy', np.array([[1, 2, 3], [4, 5, 6]]))# 先生成npy文件
np.load('test.npy')# 使用load加载npy文件
- fromfile方法
fromfile方法可以读取简单的文本数据或二进制数据,数据来源于tofile方法保存的二进制数据。读取数据时需要用户指定元素类型,并对数组的形状进行适当的修改
import numpy as np
x = np.arange(9).reshape(3,3)
x.tofile('test.bin')
np.fromfile('test.bin',dtype=np.int)
4. pandas库
- read_csv方法
read_csv方法用来读取csv格式文件,输出dataframe格式
import pandas as pd
pd.read_csv('test.csv')
- read_excel方法
读取excel文件,包括xlsx、xls、xlsm格式
import pandas as pd
pd.read_excel('test.xlsx')
- read_json方法
读取json格式文件
df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2'])
j = df.to_json(orient='split')
pd.read_json(j,orient='split')
-
read_table方法
通过对sep参数(分隔符)的控制来对任何文本文件读取 -
read_html方法
读取html表格 -
read_clipboard方法
读取剪切板内容 -
read_pickle方法
读取plckled持久化文件 -
read_sql方法
读取数据库数据,连接好数据库后,传入sql语句即可 -
read_dhf方法
读取hdf5文件,适合大文件读取 -
read_parquet方法
读取parquet文件 -
read_sas方法
读取sas文件 -
read_stata方法
读取stata文件 -
read_gbq方法
读取google bigquery数据
5、读写excel文件
python用于读写excel文件的库有很多,除了前面提到的pandas,还有xlrd、xlwt、openpyxl、xlwings等等
-
xlrd库
从excel中读取数据,支持xls、xlsx -
xlwt库
对excel进行修改操作,不支持对xlsx格式的修改 -
xlutils库
在xlw和xlrd中,对一个已存在的文件进行修改 -
openpyxl
主要针对xlsx格式的excel进行读取和编辑 -
xlwings
对xlsx、xls、xlsm格式文件进行读写、格式修改等操作 -
xlsxwriter
用来生成excel表格,插入数据、插入图标等表格操作,不支持读取 -
Microsoft Excel API
需安装pywin32,直接与Excel进程通信,可以做任何在Excel里可以做的事情,但比较慢
6. 操作数据库
python几乎支持对所有数据库的交互,连接数据库后,可以使用sql语句进行增删改查。
-
pymysql
用于和mysql数据库的交互 -
sqlalchemy
用于和mysql数据库的交互 -
cx_Oracle
用于和oracle数据库的交互 -
sqlite3
内置库,用于和sqlite数据库的交互 -
pymssql
用于和sql server数据库的交互 -
pymongo
用于和mongodb非关系型数据库的交互 -
redis、pyredis
用于和redis非关系型数据库的交互
7、python连接MySQL数据库
(1)安装PyMySQL库
- 在命令行输入 pip install pymysql
(2)安装MySQL数据库
- MySQL数据库类型有两种:MySQL和MariaDB,两者在绝大部分性能上是兼容的,区别不大
(3)SQL基本语法
-
查看数据库:SHOW DATABASES;
-
创建数据库:CREATE DATEBASE 数据库名称;
-
使用数据库:USE 数据库名称;
-
查看数据表:SHOW TABLES;
-
创建数据表:CREATE TABLE 表名称(列名1 (数据类型1),列名2 (数据类型2));
-
插入数据:INSERT INTO 表名称(列名1,列名2) VALUES(数据1,数据2);
-
查看数据:SELECT * FROM 表名称;
-
更新数据:UPDATE 表名称 SET 列名1=新数据1,列名2=新数据2 WHERE 某列=某数据;
(4)连接数据库
#首先导入PyMySQL库
import pymysql
#连接数据库,创建连接对象connection
#连接对象作用是:连接数据库、发送数据库信息、处理回滚操作(查询中断时,数据库回到最初状态)、创建新的光标对象
connection = pymysql.connect(host = 'localhost' #host属性
user = 'root' #用户名
password = '******' #此处填登录数据库的密码
db = 'mysql' #数据库名
)
(5)使用python代码操作MySQL数据库
- 首先来查看一下有哪些数据库:
#创建光标对象,一个连接可以有很多光标,一个光标跟踪一种数据状态。
#光标对象作用是:、创建、删除、写入、查询等等
cur = connection.cursor()
#查看有哪些数据库,通过cur.fetchall()获取查询所有结果
print(cur.fetchall())
- 在test数据库里创建表:
#使用数据库test
cur.execute('USE test')
#在test数据库里创建表student,有name列和age列
cur.execute('CREATE TABLE student(name VARCHAR(20),age TINYINT(3))')
- 向数据表student中插入一条数据:
sql = 'INSERT INTO student (name,age) VALUES (%s,%s)'
cur.execute(sql,('XiaoMing',23))
- 查看数据表student内容:
cur.execute('SELECT * FROM student')
print(cur.fetchone())
- 最后,要记得关闭光标和连接:
#关闭连接对象,否则会导致连接泄漏,消耗数据库资源
connection.close()
#关闭光标
cur.close()
8、python连接Oracle数据库
(1)下载安装外包cx_Oracle,方式:在命令行输入 pip install cx_Oracle
(2)连接
conn = oracle.connect('username/password@host:port/sid')#分别填用户名/密码/数据库所在IP地址:port/sid
(3)获取光标对象curser
cur = conn.cursor()
(4)使用cursor进行各种操作
cur.execute(sql语句)
(5)关闭cursur、conn
cursor.close()
conn.close()
参考:
一文搞懂Python文件读写
n种方式教你用python读写excel等数据文件
python 连接各类主流数据库简单示例
网友评论