Python 学习 第十三篇:数据的读写-文件、DataFrame、json和pymssql

Python的文件是一个重要的对象,使用open()函数来打开文件,创建文件对象,进行文件的读写操作。当数据用于交换信息时,通常需要把数据保存为有格式的文本数据,可以保存为有特定的行分隔符和列分隔符的数据,这可以使用pandas模块中的函数来读写;也可以保存为json结构的数据,这可以使用json模块中的函数来实现;对于大型的数据交互,通常使用数据库。

一,Python的open函数

open()函数用于打开文件,创建文件对象:

open(name, mode, encoding=None)

参数注释:

name是文件名,包括路径

encoding 是编码方式,常用的编码方式是utf-8

mode是打开文件的模式,最常用的模式是:

  • r:只读模式,表示打开文件是为了从文件的开头读取文件中的数据;
  • w:只写模式,表示打开文件是为了向文件写入数据。如果该文件已存在,那么打开该文件,删除原有的内容,从文件开头开始写入;如果该文件不存在,那么创建新的文件。

open()函数创建一个file 对象,文件对象的主要方法:

  • file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。
  • file.readline():只读取一行。
  • file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。
  • for line in f: print( line ):通过迭代器访问。
  • f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。
  • f.close() 关闭文件

1,读取文件

调用open()函数打开一个文件,设置mode=‘r‘,表示打开文件是为了读取文件中的数据,调用文件对象的函数或迭代器来逐行读取数据:

file = open(‘test.txt‘,‘r‘,encoding=‘utf-8‘)
lines = [line.strip() for line in file]
file.close()

注意:打开文件之后,完成文件的读写之后,必须调用文件对象的close()方法,最终关闭文件。

2,写入文件

调用open()函数打开一个文件,如果设置mode=‘w‘,那么表示打开文件是为了向文件中写入数据,调用文档对象的write(‘content‘)函数向文档中写入内容。

file = open(‘test.txt‘,‘w‘,encoding=‘utf-8‘)
file.write(‘write content to file‘)
file.close()

注意:打开文件之后,完成文件的读写之后,必须调用文件对象的close()方法,最终关闭文件。

3,文件的关闭

调用open()函数打开一个文件,是把文件读取到内存中的,如果不及时关闭文件,文件对象就会一直占用系统资源,除了调用文件对象的close()方法关闭文件之外,还可以使用 with open(),由系统自动关闭文件:

with open(‘test.txt‘,‘r‘,encoding=‘utf-8‘) as file:
    lines = [line.strip() for line in file] 

二,pandas模块

pandas模块提供了一些用于把表格型数据读取为DataFrame对象的函数。

1,格式化数据的读取

read_csv:从文件、URL、文件型对象中加载带分隔符的数据,默认的分隔符是逗号。

read_table:从文件、URL、文件型对象中加载带分隔符的数据,默认的分隔符是制表符(\t)。

参数注释:

  • path:要读取的文件的位置
  • sep:用于对行中各字段进行拆分的字符序列或正则表达式
  • header:用作列名的行号,默认值是0,如果没有header行,设置为None
  • index_col:用于行索引的列编号
  • names:用于自定义列名列表,结合header=None
  • na_values:一组用于替换NA的值
  • iterator:返回一个TextParser以便逐块读取文件
  • chunksize:文件的大小,用于迭代
  • nrows:需要读取的行数,从文件开始处计算

 2,输出数据

利用DataFrame的to_csv方法,可以把数据写到一个以逗号分隔的文件中

DataFrame.to_csv(path_or_buf=None, sep=‘, ‘, na_rep=‘‘, float_format=None, columns=None,
header=True, index=True, index_label=None, mode=‘w‘, encoding=None, compression=None,
quoting=None, quotechar=‘"‘, line_terminator=‘\n‘, chunksize=None, tupleize_cols=None,
date_format=None, doublequote=True, escapechar=None, decimal=‘.‘)

常用参数注释:

  • path_or_bu:输出文件的路径,或者设置sys.stdout
  • sep:行中个字段的分隔符,默认是逗号
  • na_rep:替换缺失数据的字符
  • columns:列名列表
  • header:是否输出header,默认值是True
  • index:是否输出索引,默认是True
  • line_terminator:列分隔符

三,json

Python中的json对象实际是一个字典结构,用于存储和交换信息,导入json模块:

import json

1,把字符串转换为json

json的load()方法用于把josn格式的字符串转换为json对象,这实际上是一个字典结构:

json_string=  ‘{ "name":"John", "age":30, "city":"New York"}‘
# parse string to json
json_obj = json.loads(json_string)

2,把字典转换为json字符串

json的dumps()函数用于把字典结构转换为json格式的字符串。

x = {
  "name": "John",
  "age": 30,
  "city": "New York"
}
# convert dict into JSON string:
json_string = json.dumps(x)

四,关系型数据库

使用pymssql连接SQL Server数据库,首先创建连接和游标:

import pymssql

conn = pymssql.connect(host=‘host‘,user=‘user‘,password=‘pwd‘,database=‘db_name‘)
cursor = conn.cursor() 

当执行select语句获得数据时,返回的数据集有两种格式:元组和字典,这需要在创建游标时设置,as_dict的默认值是False。

cursor = conn.cursor(as_dict=True) 

1,执行数据更新和删除

通过游标的execute()函数来执行TSQL语句,调用 commit() 来提交事务

cursor.execute("""
sql statement
""")  

conn.commit()

2,执行数据的多行插入

使用游标的executemany()函数来插入多行数据

cursor.executemany(
    "INSERT INTO persons VALUES (%d, %s, %s)",
    [(1, ‘John Smith‘, ‘John Doe‘),
     (2, ‘Jane Doe‘, ‘Joe Dog‘),
     (3, ‘Mike T.‘, ‘Sarah H.‘)])
conn.commit()

3,遍历数据

当从SQL Server数据库中获取数据时,使用游标的fetchone()函数,以迭代方式返回结果集的一行数据。

cursor.execute(‘SELECT * FROM persons WHERE salesrep=%s‘, ‘John Doe‘)

# 遍历数据(存放到元组中) 方式1
row = cursor.fetchone()
while row:
    print("ID=%d, Name=%s" % (row[0], row[1]))
    row = cursor.fetchone()
# 遍历数据(存放到元组中) 方式2
for row in cursor:
    print(‘row = %r‘ % (row,))

# 遍历数据(存放到字典中)
# cursor = conn.cursor(as_dict=True)
# cursor.execute(‘SELECT * FROM persons WHERE salesrep=%s‘, ‘John Doe‘)
# for row in cursor:
#     print("ID=%d, Name=%s" % (row[‘id‘], row[‘name‘]))

4,关闭连接

当查询完成之后,一定要关闭连接:

conn.close()

使用with来自动关闭连接:

import pymssql 

server = "187.32.43.13"
user = "root"
password = "1234"  

with pymssql.connect(server, user, password, "db_name") as conn:
    with conn.cursor(as_dict=True) as cursor:   # 数据存放到字典中
        cursor.execute(‘SELECT * FROM persons WHERE salesrep=%s‘, ‘John Doe‘)
        for row in cursor:
            print("ID=%d, Name=%s" % (row[‘id‘], row[‘name‘]))

参考文档:

Python之文件读写

pandas系列 read_csv 与 to_csv 方法各参数详解(全,中文版)

Python JSON

python连接sql server数据库实现增删改查

原文地址:https://www.cnblogs.com/ljhdo/p/10572063.html

时间: 2024-08-01 00:56:25

Python 学习 第十三篇:数据的读写-文件、DataFrame、json和pymssql的相关文章

python学习[第十三篇] 条件和循环

python学习[第十三篇] 条件和循环 if语句 单一if 语句 if语句有三个部分构成,关键字if本身,判断结果真假的条件表达式,以及表达式为真或非0是执行的代码 if expression: expr_true_suite 条件表达式可以是多重的 通过布尔操作符 and or not来实现 单一语句的if 代码块,如果if语句的执行代码只有一行,可以放在一行来写 if expresssion: expr_tru_suite >>> if True: print True ... T

Python学习第十三天 time datetime random os sysshutil json pickle shelve xml configparser hashlib suprocess logging re

https://www.cnblogs.com/yuanchenqi/articles/5732581.html https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label2 一 time与datetime模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(time.time())”,返回的是fl

Python学习笔记——基础篇【第五周】——json & pickle 模块

json & pickle 模块(序列化) 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps.dump.loads.load pickle模块提供了四个功能:dumps.dump.loads.load dumps和dump区别: pickle.dump(info,f) #print(pickle.dumps(info)) #f.write(pick

Python学习笔记基础篇——总览

Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列表.字典.主文件判断.对象 Python学习笔记——基础篇1[第三周]——set集合 Python学习笔记——基础篇2[第三周]——计数器.有序字典.元组.单(双)向队列.深浅拷贝.函数.装饰器 Python学习笔记——基础篇[第四周]——迭代器&生成器.装饰器.递归.算法.正则表达式 Python

Python学习笔记进阶篇——总览

Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(Socket编程进阶&多线程.多进程) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(异常处理) Python学习笔记——进阶篇[第八周]———进程.线程.协程篇(多线程与进程池) Python学习笔记——进阶篇[第九周]———线程.进程.协程篇(队列Queue和生产者消费者模型) Python学习笔记——进阶篇[第九周]———协程 Python学习笔记——进阶篇[第九周]———MYSQL操作

Python学习笔记_Chapter 4数据保存到文件

1. What For 将基于内存的数据存储到磁盘上,达到持续存储. 2. HOW 方法一: 将数据写到文件中 常规的处理方式 1 #file.x被打开的文件,model打开文件的方式 2 out=open('file.x','model') 3 #print将item写入到file指示的文件中,item可以是字符串或列表等 4 print(item,file=out) 5 #close是必须的,起到刷新输出的作用 6 out.close() open('file','model')中model

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件.那就是如何在Sdcard中读写文件. 那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个info.txt文件 public void login(View v) { String name = ed_nam.getText().toString(); String p

我的python学习--第十三天

nginx + uwsgi + flask 一.安装 1.安装uwsgi [[email protected] day_13]# wget http://projects.unbit.it/downloads/uwsgi-2.0.4.tar.gz [[email protected] day_13]# tar xf uwsgi-2.0.4.tar.gz -C /usr/local [[email protected] day_13]# cd /usr/local/uwsgi-2.0.4 [[em

Python学习系列提升篇------字符串

字符串是python学习中重要的内容,在以后的工作中,对字符串的处理也必少不了.下面总结一下关于字符串学习的经验. 1.1 字符串的连接和合并 用' + '连接,将两个字符串相加.       合并,使用关键词 join 进行合并 1.2 字符串的切片和相乘 字符串相乘    字符串切片       1.3 字符串分割 普通分割.用split      复杂分割 1.4 字符串的查找与匹配 一般查找,用 find :可以很方便的在长的字符串里面查找子字符串,会返回子字符串所在位置的索引, 若找不