python读写数据文件

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 连接各类主流数据库简单示例

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容