当前位置:首页 > Python教程 > python技巧

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 "):如果要写入字符串以外的数据,先将他转换为字符串。
  • f.close() 关闭文件

1,读取文件

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

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

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

2,写入文件

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

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

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

3,文件的关闭

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

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

二,pandas模块

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

1,格式化数据的读取

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

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

参数注释:

  • 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=<span>‘</span><span>, </span><span>‘</span>, na_rep=<span>‘‘</span>, float_format=None, columns=<span>None, 
header</span>=True, index=True, index_label=None, mode=<span>‘</span><span>w</span><span>‘</span>, encoding=None, compression=<span>None, 
quoting</span>=None, quotechar=<span>‘</span><span>"</span><span>‘</span>, line_terminator=<span>‘</span><span>
</span><span>‘</span>, chunksize=None, tupleize_cols=<span>None, 
date_format</span>=None, doublequote=True, escapechar=None, decimal=<span>‘</span><span>.</span><span>‘</span>)

常用参数注释:

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

三,json

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

            <span>import</span> json

1,把字符串转换为json

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

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

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

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

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

四,关系型数据库

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

            <span>import</span>
            <span> pymssql

conn </span>= pymssql.connect(host=<span>‘</span><span>host</span><span>‘</span>,user=<span>‘</span><span>user</span><span>‘</span>,password=<span>‘</span><span>pwd</span><span>‘</span>,database=<span>‘</span><span>db_name</span><span>‘</span><span>)
cursor </span>= conn.cursor() <span><br /></span>

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

cursor = conn.cursor(as_dict=True) 

1,执行数据更新和删除

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

cursor.execute(<span>"""</span><span>
sql statement
</span><span>"""</span><span>)  

conn.commit()</span>

2,执行数据的多行插入

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

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

3,遍历数据

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

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

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

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

4,关闭连接

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

conn.close()

使用with来自动关闭连接:

            <span>import</span>
            <span> pymssql 

server </span>= <span>"</span><span>187.32.43.13</span><span>"</span><span>
user </span>= <span>"</span><span>root</span><span>"</span><span>
password </span>= <span>"</span><span>1234</span><span>"</span><span>  

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

 

参考文档:

Python之文件读写

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

Python JSON

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

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


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐