--输入与输出(I/O)

Posted TonyW92

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了--输入与输出(I/O)相关的知识,希望对你有一定的参考价值。

导读



在第0章就说过,程序无非就是输入->逻辑->输出。所以如何处理输入和输出就显得非常重要,常见的输入有控制台输入,函数接受参数输入,常见的输出有控制台输出,文件,数据库等

常见的I/O处理



控制台输入输出

>>print("hello")
>>s = input("please scan")
>>print(s)
这个之前已经用过很多次了


数据持久化

1.文件

打开文件

>>f = open("xxx.txt)
#读取文件
>>for line in f:
    >>print(line) 

打开模式
w:写方式打开文件,如果文件存在,清空
r:读方式打开文件
a:追加的方式打开文件,如果文件存在,指针自动到文件尾部
a+:a+读
w+:w+读
b:以二进制打开文件

写文件
f.write(“hello”) //追加还是重写决定于打开的模式和指针的位置
read()
readline()
readlines()
seek()移动
tell()指针目前的位置

pickle/cpickle

pickle提供了一个简单的持久化功能。可以将对象以文件的形式存放在磁盘上
//存
prickle.dump(object, file[protocol])
object:序列化对象
file:要写入的文件
protocol:可选项,默认为false,以ASCII格式保存,如果设置为1或true,则以二进制的形式保存
//取
pickle.load(file)

举个例子
#! /usr/bin/env python
#coding=utf-8

import pickle

l = ["tony","python", 2017, 6]
f = open("D:\\\\test.txt", "wb+") 
s = pickle.dump(l, f)
#必须先关闭,否则pickle.load(f1)会出现EOFError: Ran out of input  
f.close()
f = open("D:\\\\test.txt", "rb") 
ll = pickle.load(f)
print(ll)

ll的输出结果:
["tony","python", 2017, 6]

文件里的内容:
€]q (X   tonyqX   pythonqM?Ke.



shelve

写入

>>s = shelve.open("file")
>>s["name"] = "tony"
>>s["sex"] = "male"
>>s.close()


读取

>>s = shelve.open("file")
>>name = s["name]
>>sex = s["sex"]


循环读取

>>for k in s  :
    >>print(k + s[k])

修改已有键的值

>>s = shelve.open("file", writeback=true)
>>s["name"].append("tony2")


2.数据库–关系型数据库 mysql

下载mysql
连接驱动
PyMySQL https://pypi.python.org/pypi/PyMySQL#downloads

获得数据库连接对象
conn = pymysql.connect(host=’localhost’, port=3306, user=’root’, passwd=’w19920309z’, db=’test_db’,charset=’UTF8’)

获得游标
cur = conn.cursor()

self.cur.executemany("insert into users (username, password, email) values (%s,%s,%s)", (("python","123456","python@163c.om"), ("github", "1221", "tony@163.com")))
self.conn.commit()


#还记得之前讲过的string的格式化吗 3种方式
self.execute("update user set username=%s where id=2", ("mypython"))
self.conn.commit()


self.cur.execute("select * from users")
lines = self.cur.fetchall()
for line in lines:
    print(line)
self.cur.scroll(1, "absolute")
lines = self.cur.fetchall()
for line in lines:
    print(line)


总结



I/O在实际项目中使用频率非常高,print()常用于一些简单调试,可以在控制台看到流程走到哪了,输出结果是否与期望保持一致
数据库和文件在Web项目里被使用到,用于数据的持久化
在学完下一章异常处理,整个python的语法就全部结束了,可以找一些实际项目练练手,比如搭建一个网站

以上是关于--输入与输出(I/O)的主要内容,如果未能解决你的问题,请参考以下文章

--输入与输出(I/O)

--输入与输出(I/O)

输入/输出系统(I/O)

输入输出系统

输入输出系统

I/O(输入/输出)---字节流与字符流