码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2019-04-06 00:02:25      阅读:464      评论:0      收藏:0      [点我收藏+]

标签:net   csv   index   读取   函数   sele   orm   dump   new   

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数据库实现增删改查

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

标签:net   csv   index   读取   函数   sele   orm   dump   new   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!