day28-python文件操作

一 文件基本操作

1.1.文件操作 - 文件内容的操作,主要是文件读操作和写操作

1.2.文件基本操作步骤

第一步:打开文件
第二部:读文件-获取文件内容/写文件-将内容写入文件中
第三步:关闭文件

1.2.1打开文件

open(file,mode,…,encoding=None) - 以指定的方式打开指定文件并且得到一个文件对象

  1. file - 字符串,需要打开的文件路径
  2. mode - 文件打开方式(决定打开文件后能够支持的操作是读还是写,默认是’r’(读操作);

控制读写的mode值
‘r’(默认) - 只读,被打开的文件不存在会报错
‘w’ - 只写,打开的时候会先删除原文件的内容,被打开的文件不存在,会自动创建
‘a’ - 只写,打开的时候不会删除原文件的内容,被打开的文件不存在,会自动创建
‘x’ - 只写,新建文件(打开已存在的文件会报错,打开不存在的文件会自动创建)

控制数据类型的mode值
‘t’(默认) - 文件的数据是文本数据(字符串类型,默认值,只有文本文件操作的时候才能使用)
‘b’ - 文件的数据是二进制数据(bytes类型,适用于所有文件,不能设置encoding的值)

注意:mode值的两种控制方式要一起用,‘rt’/‘tr’/‘rb’/‘br’,‘wt’/tw’/‘wb’/‘bw’,…

  1. encoding - 文本文件的编码方式,一般设置为’utf-8’
f = open('files/poem.txt')

# ========控制数据类型=======
f = open('files/poem.txt', 'rt')
content = f.read()
print(type(content))

1.2.2 读写文件

文件对象.read()
文件对象.write(内容)

1. 2.2.1 读文件
  1. 文件对象.read() - 从文件读写位置开始,读写文件结束(以读的形式打开文件,文件读写位置在文件开头)
f = open('files/词.txt')
content = f.read()
print(content)
print('=============')
# 文件对象.seek(偏移量)    -   将读写位置移动到离文件开头指定距离所在的位置(一般设置为0,让读写位置回到文件开头)
f.seek(0)
content = f.read()
print(content)
  1. 文件对象.readline() - 读一行(从读写位置开始到一行结束)
print('=======================')
f = open('files/词.txt')
line = f.readline()
print(line)

练习:一行一行的读,将整个文件的内容读完
f = open(‘files/词1.txt’, encoding=‘UTF-8’)
line = ‘’
while True:
line = f.readline()
if line == ‘’:
break
print(line)

1.2.3.写文件

文件对象.write(内容)

f = open('files/poem.txt', 'w',encoding='UTF-8')
f.write('123abc')

f = open('files/poem.txt', 'a',encoding='UTF-8')
f.write('你好')

1.2.4.关闭文件

文件对象.close() - 关闭指定文件

f.close()
f.write('asd')   # I/O operation on closed file.

二 文件域

文件域 - 文件对象的作用范围
通过with open 打开文件,能够让被打开的文件对象自带作用范围,不需要手动关闭文件。

with open(file,mode='r',...,encoding=None) as 文件对象:
    文件的作用域
with open('files/词1.txt', encoding='UTF-8') as f:
    print(f.read())
print(f.read())  #  ValueError: I/O operation on closed file.

三 数据持久化

3.1.数据持久化

程序中的数据默认都是保存在运行内存中的,当程序运行结束后全部都会自动销毁

数据持久化是将数据保存到文件中(文件是保存在硬盘中,硬盘中的数据除非硬盘损坏或者格式化或者手动操作,否则是不会销毁的)

3.2.什么时候需要做数据持久化

如果希望这次运行程序产生的数据,在下一次运行程序的时候还能用,那么这个时候就需要做持久化

3.3.怎么做持久化

满足以下三点数据就能持久化:
a.用一个文件来保存对应的数据
b.程序中需要这个数据的时候,从文件中读出这个数据,而不是在程序中直接给值
c.数据发生了改变,要将最新的数据更新到文件中

练习:写程序打印当前程序运行的次数

with open('files/num.txt', encoding='UTF-8') as f:
    num = int(f.read())

num += 1
with open('files/num.txt', 'w', encoding='UTF-8') as f:
    f.write(str(num))

print('次数:', num)

四 CSV文件的写操作

4.1.什么是CSV文件

CSV是一种用逗号将一行数据隔开的文本文件,这种文件可以用表格来打开,多用于数据处理中数据的提供和保存。

4.2.Python中怎么操作CSV文件

Python的标准库中有一个csv库,专门用来提供和csv文件操作相关功能

4.2.1写数据

a.创建writer
写对象 = csv.writer(csv文件对象)
写对象.writerow(元素是一行内容的列表) - 写入一行数据
写对象.writerows(元素是列表的列表) - 写入多行数据
import csv

  1. csv文件的写操作方式一 - 以列表的形式写入数据
with open('files/学生信息.csv', 'w', encoding='UTF-8', newline='') as f:
    # a.写入数据
    # 创建writer
    writer = csv.writer(f)
    # 写入一行数据
    writer.writerow(['姓名', '成绩', '年龄'])

    # 同时写入多行数据
    writer.writerows([
        ['张三', '90', '28'],
        ['李三', '95', '18'],
        ['刘三', '83', '25'],
    ])
  1. csv文件的写操作方式二 - 以字典的形式写入数据
with open('files/商品信息.csv', 'w', newline='', encoding='UTF-8') as f:
    # 创建writer对象
    # csv.DictWriter(文件对象,字段名列表)
    writer = csv.DictWriter(f, ['商品名称', '价格', '折扣', '数量'])

    # 单独添加头部数据(将字段名列表中的元素作为第一行的数据写入文件)
    writer.writeheader()

    # 添加一条其他数据
    writer.writerow(
        {'商品名称': '鞋子', '价格': '¥300', '折扣': 7, '数量':230}
    )

    # 同时添加多条其他数据
    writer.writerows([
        {'商品名称': '鞋子', '价格': '¥300', '折扣': 7, '数量':500},
        {'商品名称': '帽子', '价格': '¥500', '折扣': 7},
        {'商品名称': '围巾', '价格': '¥200', '折扣': 7},
        {'商品名称': '裤子', '价格': '¥100', '折扣': 7}
    ])

五 CSV文件的读操作

5.1.以列表的形式读数据

with open('files/商品信息.csv', newline='', encoding='UTF-8') as f:
    # 获取文件的内容,返回值reader本质是一个迭代器,迭代器中的元素是每一行内容对应的列表。
    reader = csv.reader(f)

    # a.一行一行的获取数据
    # 单独取出第一行数据
    next(reader)

    # 遍历其他行的数据
    for x in reader:
        print('x', x)

    # b.同时获取所有数据
    data = list(reader)
    print(data)

5.2.以字典的形式读数据

with open('files/商品信息.csv', newline='', encoding='UTF-8') as f:
    reader = csv.DictReader(f)

    # 直接获取第一行数据对应的列表
    print(reader.fieldnames)

    # 遍历获取每一行数据对应的字典(需要将元素转换成字典)
    for x in reader:
        print('x', dict(x))

with open('files/商品信息.csv', newline='', encoding='UTF-8') as f:
    reader = csv.DictReader(f)

    new_reader = list(map(lambda item: dict(item), reader))
    print(new_reader)

    all_name = list(map(lambda item: item['商品名称'], new_reader))
    print(all_name)

六 json数据

6.1.什么是json

json是一种特殊的文本数据格式,绝大部分编程语言都支持这种格式的数据的处理,一般在不同语言的程序之间进行数据交流的时候,数据的格式都是json格式。

6.2.json格式

json格式的数据要求:
1)一个json有且只有一个数据
2)唯一的这个数据必须是json支持的数据类型的数据

json支持的数据类型和表示方式:
数字类型 - 所有的数字;表示的时候直接写:100,-100,23.98
字符串 - 所有的文本数据;表示的时候需要双引号引起来:“啊哈”,“hello”,“abc\n123”,“4e00”
布尔类型 - 只有 true 和 false 两个值
数组类型 - [元素1,元素2,元素3,…]
字典类型 - {键1:值1,键2:值2,…}
空值 - null(相当于Python中的None)

6.3.python数据和json之间的相互转换

python标准库中提供了一个json模块,专门用来解决python中json数据的处理

  1. python 转 json
    int/float 数字
    字符串 双引号字符串
    True true
    False false
    None null
    列表、元组 数组
    字典 字典

json.dumps(python数据) - 将指定的python数据转换成对应的json格式的字符串(字符串的内容符合json格式的要求的字符串就是json格式的字符串)

import json

num = 48
num_json = json.dumps(num)
print([num_json])

str1 = '你好,json'
str1_json = json.dumps(str1)
print([str1_json])
  1. json->python
    json 转 python
    数字 int/float
    字符串 字符串(引号会变成单引号)
    true True
    false False
    null None
    数组 列表
    字典 字典

json.loads(json格式的字符串) - 将json格式字符串中的数据转换成相应的python类型的数据

result = json.loads('"abc"')
print([result])

result = json.loads('234')
print([result])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值