一、python的IO
IO指的是在python中实现输入和输出的操作。
1、输出到控制台
在python中输出数据到控制台的最简单方式就是print()方法,默认的标准输出是屏幕,常见的语法结构如下:
#先定义两个变量,用于输出打印
age = 28
name = "allen老师"
#直接输出字符串
print("hello world!!")
#输出数据,并使用占位符
print("大家好,我是%s,今年%d岁啦!"%(name,age))
#输出数据,逗号分隔变量
print("大家好,我的姓名和年龄是:",name,age)
#输出数据,使用+连接字符串
print("大家好,我的姓名是:"+name+",我的年龄是:"+str(age))
====输出结果===========
hello world!!
大家好,我是allen老师,今年28岁啦!
大家好,我的姓名和年龄是: allen老师 28
大家好,我的姓名是:allen老师,我的年龄是:28
2、键盘输入数据
Python提供了input函数从标准输入设备上读入一个字符串,默认的标准输入是键盘,常见的语法结构如下:
choice = input("请输入你的选项:")
num = int(input("请输入一个数字:"))
二、python的文件IO
Python 提供了必要的函数对文件进行IO操作,你可以用通过open方法创建文件对象,并对文件对象进行读写操作。
1、open 函数
你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写
file object = open(file_name ,mode,encoding)
- filename:一个包含了你要访问的文件名称的字符串值,要求是全路径,如r"e:\xxx.txt"或者"e:\\xxx.txt"
- mode:文件的访问模式,只读,写入,追加等
- encoding:读取数据的编码格式,只有文本文件时才能加该参数
#文件流对象名:f = open(filename,mode)
#要保证你文件字符集和读取的字符要要一致
f = open(r"e:\xxx.txt","r",encoding="utf-8")
mode是文件的读写方式:
- r:只读模式,不能写入,默认的格式,必须是文件已经存在
- w:只写模式,覆盖写入,如果文件不存在,创建文件并写入
- a:追加写入,在原来文件内容的基础上,继续写入数据
- r+:读写模式,需要文件已存在
- w+:读写模式,文件可以不存在,它可以先创建、再读写
- b:二进制读写
2、文件的操作
对文件的操作,基本上就是对文件的读写操作。
读取文本文件中的数据:
- read(size) :从文件读取指定的字节数,如果未给定或为负则读取所有
- readline(size) :用于从文件读取整行,包括 “\n” 字符,指定非负整数,则返回相应的字节数
- readlines(size):读取所有行并返回列表,如size大于零,则一次性返回相应的字节数(减少压力)
#文件流对象名:f = open(filename,mode)
#要保证你文件字符集和读取的字符要要一致
# f = open(r"e:\xxx.txt","r",encoding="utf-8")
#可以不给read方法参数,默认全都读出
#也可以给,如果小于内容的长度,按照指定的字节数读出数据
#如果大于内容的长度,读出所有
# print(f.read(10))
#读取一行数据,包括后面的回车
print(f.readline(10))
#读所有行数据,返回的是一个列表,列表的元素是每一行数据
print(f.readlines())
f.close()
可以使用readlines()方法实现一个简易的小说阅读器:
- 先创建一个txt文件,将含有多行数据的小说内容粘贴进去
- 编写如下代码,就可以实现每隔1秒显示一行文字的效果
f = open(r"e:\xiaoshuo.txt","r",encoding="utf-8")
for line in f.readlines():
print(line)
time.sleep(1)
f.close()
往文本文件中写入数据:
- write(str):将字符串写入文件,返回的是写入的字符长度。
- writelines():向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
f = open(r"e:\sss.txt","w",encoding="utf-8")
# print(f.write("hello world!"))
ll = ["asdfasdf\n","asdfasdfasfsdf\n"]
f.writelines(ll)
f.close()
3、with语句的使用
使用open去打开一个文件进行读取,假设文件不存在的话,就会抛出一个IOError的错误,此时open后面的close方法将不能正常执行,所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现。
try:
f = open(r'e:\xxx.txt', 'r')
print(f.read())
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:
with open(r"e:\xxx.txt","r",encoding="utf-8") as f:
print(f.read())
这和前面的try … finally实现的效果是一样的,但是代码更佳简洁,并且不必调用f.close()方法。
三、csv文件的IO操作
1、创建csv文件
- 创建excel文件,编辑数据后另存为带逗号分隔符的csv文件
- 创建txt文件,重命名为csv格式,编辑文本,以逗号分隔数据
文本文件存储数据:
username,password,repassword,email
user1,123456,123456,user1@163.com
user2,123456,123456,user2@163.com
user3,123456,123456,user3@163.com
user4,123456,123456,user4@163.com
user5,123456,123456,user5@163.com
user6,123456,123456,user6@163.com
user7,123456,123456,user7@163.com
user8,123456,123456,user8@163.com
user9,123456,123456,user9@163.com
user10,123456,123456,user10@163.com
2、读取csv文件数据
import csv
#现在要做的就是对csv文件的读操作
with open(r"e:\dd.csv","a",encoding="utf-8") as f:
data = csv.reader(f)
#<_csv.reader object at 0x000001B4E939B518>
# <class '_csv.reader'>ss
# print(type(data))
for i in data:
print(i)
=输出结果=====
[‘username’, ‘password’, ‘repassword’, ‘email’]
[‘user1’, ‘123456’, ‘123456’, ‘user1@163.com’]
[‘user2’, ‘123456’, ‘123456’, ‘user2@163.com’]
[‘user3’, ‘123456’, ‘123456’, ‘user3@163.com’]
[‘user4’, ‘123456’, ‘123456’, ‘user4@163.com’]
[‘user5’, ‘123456’, ‘123456’, ‘user5@163.com’]
[‘user6’, ‘123456’, ‘123456’, ‘user6@163.com’]
[‘user7’, ‘123456’, ‘123456’, ‘user7@163.com’]
[‘user8’, ‘123456’, ‘123456’, ‘user8@163.com’]
[‘user9’, ‘123456’, ‘123456’, ‘user9@163.com’]
[‘user10’, ‘123456’, ‘123456’, ‘user10@163.com’]
3、写入csv文件数据
import csv
#现在要做的就是对csv文件的写操作
with open(r"e:\dd.csv","a",encoding="utf-8",newline='') as f:
# 往csv文件中写入一行数据
dda = ['user11', '123456', '123456', 'user1@163.com']
csv_writer = csv.writer(f,dialect="excel")
csv_writer.writerow(dda)
# 往csv文件中写入多行数据
csv_writer.writerows([['user11', '123456', '123456', 'user11@163.com'],['user12', '123456', '123456', 'user12@163.com']])
newline=’’,主要是避免写入数据之后,有多余的换行
四、excel文件的IO操作
使用xlrd、xlwt模块对excel文件中的数据进行读写。
1、安装xlrd模块
window+R打开cmd窗口,执行下面命令完成xlrd、xlwt的安装
pip3 install xlrd
pip3 install xlwt
2、读取数据
将上文的数据做到excel文件中,作为数据源
import xlrd
#f作为文件对象
f = xlrd.open_workbook(r"e:\dd.xlsx")
# <xlrd.sheet.Sheet object at 0x000001801A725248>
# sheet页索引号是从0开始的
# table = f.sheet_by_index(0)
# table = f.sheet_by_name("Sheet1")
table = f.sheets()[0]
rows = table.nrows
cols = table.ncols
# print(rows)
# print(table.row_values(0)[0])
for i in range(0,n):
#遍历行数据,然后索引单元格
# print(table.row_values(i)[0])
#直接通过坐标,遍历单元格数据
print(table.cell_value(i,0))
3、写入数据
import xlwt
#创建工作簿
f = xlwt.Workbook(encoding="utf-8")
# #创建sheet
sheet1 = f.add_sheet(r'sheet1',cell_overwrite_ok=True)
row0 = ["user00","123456",'123456',"user00@163.com"]
#生成第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i]) # 顺序为x行x列写入第x个元素
f.save('e:\dd.xls')
======输出结果======
在e:根目录下创建了一个心的excel工作簿,数据也被写入其中
读取文件
先把文件转码称为csv格式,最好把文字格式转为utf8格式,然后下面代码读取文件
import csv #导入csv文件
with open(r"C:\python\haha.csv","r",encoding="utf-8") as f:#(as 后跟的别名)
data=csv.reader(f)
for i in data:
print(i)
# print(i[0])索引求其中的元素
# print(i[1])
# print(i[2])