python-17 文件操作 IO模块 压缩

利用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")



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值