Python笔记20-常用文件读写一

一、文件读写

常见文件的读写分类:

1.普通文本文件:txt   py   md   html    doc等

2.csv文件:.csv

3.二进制文件:图片,音频,视频,压缩包等

4.对象的序列化和反序列化:pickle和json

5.excel文件:需要借助于第三方模块xlrd和xlwt

文件读写也是面向对象的思想,常用的操作系统不允许程序直接访问磁盘,可以通过文件描述符读写文件

f = open(path,mode,encoding),执行这句代码只是在内存中打开一个文件对象,f被称为文件描述符,该对象中存储的是被打开的文件对象

1.普通文件读写

1.1写入

# 1.打开文件:open()

"""
注意:
    a.可以使用w或a写入内容,二者在指定文件路径不存在的情况下,都可以生成新的文件
    b.w:删除原文件,生成一个新的文件,所以如果文件存在的前提下,可以理解为覆盖掉源文件中的内容
    c.a:如果文件存在的前提下将指定内容追加到源文件内容的后面
"""

# f1 = open(r'file1.txt','w',encoding='utf-8')
# f1 = open(r'file2.txt','w',encoding='gbk')
# f1 = open(r'file2.txt','w',encoding='gbk')
f1 = open(r'file2.txt','a',encoding='gbk')

# 2.写入内容:write()/writelines()
# a.write()         *******
# f1.write("hello你好")
# 表示刷新,如果需要写入的内容量较大,提高写入效率
# f1.flush()

# b
# f1.writelines("13413\nfahjghj\n你好\n571857")
f1.writelines(['aaaa','bbbb','cccc'])  # 将列表中的字符串元素拼接成一个字符串,直接写入
f1.flush()

# 3.关闭文件:close()
f1.close()

1.2读取

# 1.打开文件:open()
"""
open(file,mode='r',encoding)
    file:要打开的文件路径,使用相对路径或绝对路径都可以
    mode:文件打开的方式,
        'r'       open for reading (default)
        'w'       open for writing, truncating the file first,删除原文件,生成一个新的文件,写入内容,如果指定路径的文件不存在,则会自动创建
        'x'       create a new file and open it for writing,创建一个新的文件,用于写入
        'a'       open for writing, appending to the end of the file if it exists,将指定内容追加到已有文件已有内容的后面,可以创建一个新的文件
        'b'       binary mode,用于操作二进制文件
            rb:以只读的方式打开一个二进制文件
            wb:以写入的方式打开一个二进制文件
        '+'       open a disk file for updating (reading and writing)
            r+:侧重于读
            w+:侧重于写
    encoding:编码格式
        utf-8/UTF-8/UTF8/utf8
        gbk/GBK
"""
"""
注意1:
    a.打开文件进行读取内容时,encoding需要和原文件的编码格式保持一致,否则无法读取
    b.打开文件进行读取内容时,文件路径一定要存在
    c.打开模式mode默认值为r,所以读取普通文本文件,r可以省略
    d.开始读取内容时,文件描述符默认在文件的开头,然后按照指定的规则进行读取
    e.read()适用于文件内容较少的情况,read(size)借助于循环适用于读取文件内容较多的情况
      readlines()适用于文件内容存在规律的情况下
    f.文件操作完毕之后,尽量关闭文件,避免系统资源的浪费
"""
f = open(r'致橡树.txt','r',encoding='gbk')
# print(f,type(f))

# 2.读取内容:read()/readline()/readlines()
# a.f.read()默认全部读写
r1 = f.read()   # ******
print(r1)

# r1 = f.read(5)
# print(r1)
# r1 = f.read(5)
# print(r1)

# b.readline():一次性读取一行
# r2 = f.readline()
# print(r2)

# c.readlines():全部读取,返回值为一个列表,一行是一个元素   ******
# r3 = f.readlines()
# print(r3)

# d.readable():并不是用来读取文件内容的,只是标记指定文件是否是可读的,返回结果为布尔值
# r4 = f.readable()
# print(r4)

# 3.关闭文件:close()
f.close()

1.3循环操作

# 1.需求:一次性只能读取5个字符
# read(n)
import  os
path = r"file1.txt"
f = open(path,"r",encoding="utf-8")
# 统计文件字符数
total_size = os.path.getsize(path)
# 设定一次需要读取的字符数,一般情况下,一次读取的字符数设定为2的次方
sub_size = 1024
while total_size > 0:
    r = f.read(sub_size)
    print(r)
    total_size -= sub_size
f.close()

# 2.需求:一次读取一行,将所有内容全部读取
# readline()
path = r"file1.txt"
f = open(path,"r",encoding="utf-8")
r = f.readline()
print(r)
while r:
    r = f.readline()
    print(r)
f.close()

1.4with上下文

"""
通过with上下文进行文件的读写
语法:
    with   open()   as  f:
        读取/写入

说明:f其实就是一个变量,表示被打开的文件对象

注意:如果使用with上下文,不管是读取还是写入,最后不需要手动关闭文件
     当with代码块执行完毕,涉及到的文件会被自动关闭
"""

# 1.读取
with open(r'致橡树.txt','r',encoding='gbk') as f:
    r = f.read()
    print(r)


# 2.写入
with open(r"file1.txt",'w',encoding='utf-8') as f:
    f.write('abc计算机')
    f.flush()

2.二进制文件读写

# 常用二进制文件有:图片,音视频,压缩包等

"""
注意:
    a.如果要操作二进制文件,则使用rb或wb的方式打开二进制文件
    b.如果采用rb或wb的方式打开二进制文件,则没有必要指明encoding
"""

# 1.读取
with open(r"111.png",'rb')  as f1:
    r = f1.read()
    print(r)

# 2.写入
with open(r"img.png",'wb') as f2:
    f2.write(r)
    f2.flush()

3.CSV文件读写

CSV(Comma Separated Values逗号分隔值)

.csv是一种文件格式(如.txt、.doc等),也可理解.csv文件就是一种特殊格式的纯文本文件。即是一组字符序列,字符之间用英文字符的逗号或制表符(Tab)分隔

所以,CSV文件本身就是是个纯文本文件,这种文件格式经常用来作为不同程序之间的数据交互的格式

在windows系统环境上.csv文件打开方式有多种,如记事本、excel、Notepad++等,只要是文本编辑器都能正确打开

3.1读取

"""
csv文件常用的原因:
    a.可以作为不同程序之间进行数据交换的中介
    b.Python中内置了csv模块,直接导入就可以使用
    c.csv文件可以通过excel打开,如果直接操作excel,都需要安装第三方模块
"""
import  csv
# from collections import  Iterator

# 1.使用普通文本文件的的读取方式可以读取csv文件,但是,没有呈现出csv数据的特点
# with open(r'c1.csv','r',encoding='utf-8') as f:
#     r = f.read()
#     print(r)

# 2.使用csv特有的方式读取
# a.打开
with open(r'c1.csv','r',encoding='utf-8') as f:
    # b.读取
    # csv.reader(iterable),文件对象f本身就是一个iterable,返回一个iterator
    # 迭代器具有生成器的特点,元素是在访问的过程中生成的
    r = csv.reader(f)
    # print(r)
    # print(isinstance(r,Iterator))   # True

    # c.遍历迭代器
    datalist = []
    for row in r:
        # print(row)
        datalist.append(row)
    print(datalist)

3.2写入

import  csv

# 1.打开
with open(f"c2.csv",'w',encoding='utf-8') as f:
    # 2.将文件对象转换为一个可迭代对象
    csv_writer = csv.writer(f)

    # 3.写入
    # a.字符串
    # csv_writer.writerow('hello')  # h,e,l,l,o

    # b.列表
    infolist = [['name', 'age', 'hobby', 'address'], ['aaa', '10', 'dance', 'xian'], ['zhangsan', '20', 'sing', 'shanghai'], ['bbb', '14', 'piano', 'guangzhou']]
    # 方式一
    # for row in infolist:
    #     csv_writer.writerow(row)
    # 方式二
    csv_writer.writerows(infolist)

# 2
with open(f"c3.csv", 'w', encoding='utf-8') as f:
    # c.字典
    data_list = [
        {'name':'张三','age':18},
        {'name': '张三2', 'age': 17},
        {'name': '张三3', 'age': 10},
        {'name': '张三4', 'age': 13}
    ]

    csv_writer = csv.DictWriter(f,data_list[0].keys())
    # 写入标题,字典中的key会自动被作为csv文件的标题写入
    csv_writer.writeheader()
    # 写入正文
    csv_writer.writerows(data_list)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值