利用with语句
open()
write()
writelines() 写的是列表
不用手动关闭,系统自动关闭,然后释放资源。
with open(路径)as f
f 对象的名字 自定义的名字
with open("D:\data.txt","w")as f:
f.write("12334567\n")
f.writelines(["abc\n","def\n"])
read() 返回一个字符串
readlines() 读取多行返回的是一个列表
readline() 读取一行
Eg1:
print(f.readline())
print(f.read())
print(f.readlines())
f.close()
结果:
12334567
abc
def
[]
Eg2:
f = open("D:\data.txt","r")
print(f.readline())
print(f.readlines())
print(f.read())
f.close()
结果:
12334567
['abc\n', 'def\n']
改正代码:
1.路径前加上r 避免转义
2.加上编码方式
with open(r"D:\data.txt","r",encoding="utf-8")as f:
for s in f.readlines():
print(s,end=" ")
结果
12334567
abc
def
获取系统的默认编码
import sys
print(sys.getdefaultencoding())
结果:
utf-8
二进制文件读写
写
模式: wb
写的方式前面加 b
with open(r"D:\data1.txt","wb")as f:
f.write(b"123456\n")
读
with open(r"D:\data1.txt","rb")as f:
b =f.read()
print(b)
结果:
b'123456\n'
随机文件读写
模式:w+b
with open(r"D:\data1.txt","w+b")as f:
f.write(b"123456\n")
读取:
模式 : r+b
with open(r"D:\data1.txt","r+b")as f:
b =f.read()
print(b)
IO模块
内存文件的操作:
在内存中创建临时文件,进行读取
在IO模块中提供了两个对象用于二进制文件和文本文件内内存里面的操作
StringIO
from io import StringIO
f = StringIO("hello\n hi\n Goodbye")
for s in f:
print(s)
结果:
hello
hi
Goodbye
========================
BytesIO
from io import BytesIO
f = BytesIO()
f.write("中国".encode('utf-8'))
f.seek(0)
s = f.read()
print(s)
结果:
b'\xe4\xb8\xad\xe5\x9b\xbd'
另一种方法:
from io import BytesIO
f = BytesIO()
f.write("中国".encode('utf-8'))
print(f.getvalue())
运行结果:
b'\xe4\xb8\xad\xe5\x9b\xbd'
压缩
gzip
Eg:
import sys,gzip
filename = sys.argv[0]
filenamezip = filename+ '.gz'
with gzip.open(filenamezip,'wt') as f:
for s in open(filename,'r'):
f.write(s)
for s in gzip.open(filenamezip,'r'):
print(s)
python test.py
=================
结果:
b'import sys,gzip\r\n'
b'\r\n'
b'filename = sys.argv[0]\r\n'
b"filenamezip = filename+ '.gz'\r\n"
b"with gzip.open(filenamezip,'wt') as f:\r\n"
b" for s in open(filename,'r'):\r\n"
b' f.write(s)\r\n'
b'\r\n'
b"for s in gzip.open(filenamezip,'r'):\r\n"
b' print(s)\r\n'
CSV
逗号分隔文本格式。用来做excel和数据库的数据的导入和导出
创建:
方式1:
excel表格创建
数据之间的逗号必须是英文逗号
只能有一个sheet
CSV的读取
csv.reader 对象
import csv
def csv1(path1):
with open(path1,newline="") as f:
f_csv = csv.reader(f)
headers = next(f_csv)
print(headers)
for row in f_csv:
print(row)
if __name__ == '__main__':
csv1("D:\info.csv")
['姓名,性别,年龄']
['Alice,女,25']
CSV的写入
writerow() 写入一行数据
writerows() 写入多行数据
dialect :只读文件
import csv
def csv2(path1):
headers = ['学号','姓名','班级','语文']
rows = [('201895444','张三','1602','12'),
('201895423','张一','1603','23'),
('201895445','张四','1604','24')]
with open(path1,newline="") as f:
f_csv = csv.writer(f)
f_csv.writerow(headers)
f_csv.writerow(rows)
if __name__ == '__main__':
csv2("D:\info.csv")