python语法--文件(16)

1.文件的打开与关闭

在字符串前+r 表示原生的字符串,忽略转义字符

文件路径:

绝对路径:指的是绝对位置,完整地描述了目标的所在地,所有目录层级关系是一目了然的。

相对路径:是从当前文件所在的文件夹开始的路径。
./ 表示当前文件夹
…/表示上一级文件夹

1.1 打开文件

格式:

          stream = open(r'F:\a.txt', 'w')    #  结果为一个流
访问模式说明
r以只读方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,则报错。这是默认模式。
w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
w+打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+以二进制格式打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

1.2 关闭文件

格式:

      f = open('test.txt', 'w')
      f.close()

文件的打开操作必须成对出现

2. 文件的写入和读取

2.1 文件的写入

2.1.1 write
2.1.2 writelines(iterable)没有换行功能

2.2 文件的读取

读取文件需要注意文件的编码格式
read(num):
num表示读取文件的长度,不传num表示读取文件的所有数据

readline: 只用来读取一行数据。

readlines: 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行为列表的一个元素。

2.3 指针定位

tell() 方法用来显示当前指针的位置

seek(offset,whence) 方法用来重新设定指针的位置。
offset:表示偏移量
whence:只能传入0,表示从文件头开始

3. 文件的复制

单文件复制:

src_path = r'F:\新建文件夹\15.jpg'
des_path = r'shinv.jpg'

read_stream = open(src_path, 'rb')
s = read_stream.read()
read_stream.close()
write_stream = open(des_path, 'wb')
w = write_stream.write(s)
write_stream.close()

多文件复制:

import os

src_path = r'F:\新建文件夹'
des_path = r'E:\新建文件夹'

list = os.listdir(src_path)   # 获取指定文件夹下的所有文件名,返回值为列表

for i in list:
    if i.endswith('.jpg'):
        file_name = src_path + '\\'+i   # 拼接完整的源文件路径
        with open(file_name,'rb') as read_stream:
            all_content = read_stream.read()
            des_file = des_path + '\\' + i  # 拼接完整的目标文件路径
            with open(des_file,'wb') as write_stream:
                write_stream.write(all_content)

4. csv文件

CSV文件:Comma-Separated Values,中文叫逗号分隔值或者字符分割值,其文件以纯文本的形式存储表格数据。可以把它理解为一个表格,只不过这个表格是以纯文本的形式显示的,单元格与单元格之间,默认使用逗号进行分隔;每行数据之间,使用换行进行分隔。

4.1 csv文件的读取

import csv

with open('data.csv', 'r', encoding='utf-8') as read_stream:
    csv_read = csv.reader(read_stream)  # csv_read 是一个可迭代对象
    for line in csv_read:  # 对结果进行遍历,获取到结果里的每一行数据,列表类型
        print(type(line), line)

以字典形式读取数据:

import csv

with open('data.csv', 'r',encoding='utf-8') as read_stream:
    dict_reader = csv.DictReader(read_stream,fieldnames=["日期","购买用户数","广告费用","渠道数"])
    for i in dict_reader:
        print(dict(i))

fieldnames不赋值,默认以数据第一行为表头

4.2 csv文件的写入

file = open('test.csv','w')
writer = csv.writer(file) # 调用writer方法,传入csv文件对象,得到的结果是一个CSVWriter对象
writer.writerow(['name', 'age', 'score']) # 调用CSVWriter对象的writerow方法,一行行的写入数据
writer.writerows([['zhangsan', '18', '98'],['lisi', '20', '99'], ['wangwu', '17', '90'], ['jerry', '19', '95']])
# 还可以调用writerows方法,一次性写入多行数据

写入字典类型的数据:

import csv

students = [{'姓名': 'lily', '班级': 'python01', '学号': '00201'},
            {'姓名': 'lily2', '班级': 'python02', '学号': '00251'},
            {'姓名': 'lily3', '班级': 'python01', '学号': '00211'},
            {'姓名': 'lily4', '班级': 'python03', '学号': '00221'}]

with open('students01.csv', 'w', encoding='utf-8', newline='') as write_stream:
    dict_writer = csv.DictWriter(write_stream, fieldnames=['姓名', '班级', '学号'])
    dict_writer.writeheader()  # 写入表头
    dict_writer.writerows(students)

5. 序列化和反序列化

字典、列表、元组等不能通过文件操作直接写入文件,需要对他们进行序列化,才能写入到文件中。而字符串可以写入到本地文件中。

按某种规则将内存中的数据转换为字节序列,从而保存到文件中,为序列化。
从文件的字节序列中恢复到内存中,为反序列化。

5.1 json模块实现序列化和反序列化

JSON(JavaScriptObjectNotation, JS对象简谱)是一种轻量级的数据交换格式,它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON的本质是字符串!

dumps方法:
将对象转化为字符串,不具备将数据写入到文件的功能。

格式:

        result = json.dumps(转换对象)

dump方法:
在将对象转换成为字符串的同时,指定一个文件对象,把转换后的字符串写入到这个文件里

格式:

        json.dump(转换对象,写入的流)

注意:如果是一个空对象,调用dumps方法转换成为一个JSON对象,得到的结果是null(JS里的空对象)

loads方法:
需要一个字符串参数,用来将一个字符串加载成为Python对象。

load方法:
可以传入一个文件对象,用来将一个文件对象里的数据加载成为Python对象。

5.2 pickle模块

基本与json模块相同,但是json是将文件转换为字符串类型,而pickle模块是将对象转换为二进制。所以,如果想要把内容写入到文件里,这个文件必须要以二进制的形式打开。

区别:
json可以跨平台传输数据
json将对象转为字符串,而字符串任何操作系统,任何编程语言都可识别,pickle将对象转换为二进制

知识点:

扩展名:不影响文件内容,只是操作系统为了关联文件的默认处理方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值