第六章:文件与数据格式化

1.概述
(1)文件标识

意义:找到唯一确定文件

组成:文件路径,文件名主干,文件扩展名

操作系统以文件为单位进行管理

(2)文件类型

文本文件门存储文本字符数据

二进制文件不能直接使用文字处理程序正常读写,必须先了解其结构和序列化规则,再设计正确的反序列化规则

划分基于数据逻辑存储结构而非物理存储结构,在物理层面都以二进制形式存储

(3)标准文件

stdin (标准输入文件)对应输入设备,如键盘。
stdout (标准输出文件)
stderr (标准错误文件)对应输出设备,如显示器。
import sys
file = sys.stdout
file.write("hello")

2.文件基本操作

(1) 打开

open()

open(file, mode='r', buffering=-1)
file :文件的路径。
mode :设置文件的打开模式,取值有 r w a
buffering :设置访问文件的缓冲方式。取值为 0 1
r 以只读方式打开文件 mode 参数的默认值)。
w 只写 方式打开文件
a 以追加方式打开文件
b 以二进制形式打开文件
+ 以更新的方式打开文件(可读可写)

打开模式

名称

描述

r/rb

只读模式

以只读的形式打开文本文件/二进制文件,若文件不存在或无法找到,文件打开失败

w/wb

只写模式

以只写的形式打开文本文件/二进制文件,若文件已存在,则重写文件,否则创建新文件

a/ab

追加模式

以只写的形式打开文本文件/二进制文件,只允许在该文件末尾追加数据,若文件不存在,则创建新文件

r+/rb+

读取(更新)模式

以读/写的形式打开文本文件/二进制文件,若文件不存在,文件打开失败

w+/wb+

写入(更新)模式

以读/写的形式打开文本文件/二进制文件,若文件已存在,则重写文件

a+/ab+

追加(更新)模式

以读/写的形式打开文本/二进制文件,只允许在文件末尾添加数据,若文件不存在,则创建新文件

open(file, mode='r', buffering=-1)

file1 = open('E:\\a.txt')		# 以只读方式打开E盘的文本文件a.txt
file2 = open('b.txt', 'w')		# 以只写方式打开当前目录的文本文件b.txt
file3 = open('c.txt', 'w+')		# 以读/写方式打开文本文件c.txt
file4 = open('d.txt', 'wb+')	# 以读/写方式打开二进制文件d.txt

若待打开的文件不存在,文件打开失败,程序会抛出异常,并打印错误信息:
------------------------------------------------------------------------
FileNotFoundError                  Traceback (most recent call last)
<ipython-input-5-23b0bb5a2ffc> in <module>
----> 1 file1 = open("b.txt")

FileNotFoundError: [Errno 2] No such file or directory: 'b.txt'

 (2)关闭

内置方法:close()

file.close()

自动关闭:with()

with open('a.txt') as f:
        pass

(3)读取

指定字节:read()

read(n=-1)


with open('file.txt', mode='r') as f:
    print(f.read(2))   						# 读取两个字节的数据
    print(f.read())    						# 读取剩余的全部数据

指定一行:readline()

readline() 


with open('file.txt', mode='r', encoding='utf-8') as f:
    print(f.readline())
    print(f.readline())

多行:readlines()

readlines(hint=-1)


with open('file.txt', mode='r', encoding='utf-8') as f:
    print(f.readlines())                                                                 # 使用readlines()方法读取数据

(4)写

指定字符串:write()

write(data)


string = "Here we are all, by day; by night."		# 字符串
with open('write_file.txt', mode='w', encoding='utf-8') as f:	
    size = f.write(string)					# 写入字符串
    print(size)						# 打印字节数

行列表:writelines()

writelines(lines)


string = "Here we are all, by day;\nby night we're hurl'd By dreams, 
each one into a several world."
with open('write_file.txt', mode='w', encoding='utf-8') as f:
    f.writelines(string)

(5)定位读写

操作是连续的,每个文件对象都有“文件读写位置”属性,该属性为0则在文件首部

tell()获取当前读写位置

with open('file.txt') as f:
    print(f.tell())					# 获取文件读写位置
    print(f.read(5))				# 利用read()方法移动文件读写位置
    print(f.tell())					# 再次获取文件读写位置

seek()控制文件读写位置

seek(offset, from)

with open('file.txt') as f:
    print(f.tell())					# 获取文件读写位置
    print(f.read(5))				# 利用read()方法移动文件读写位置
    print(f.tell())					# 再次获取文件读写位置

 offset:表示偏移量,即读写位置需要移动的字节数

from:用于指定文件的读写位置,该参数的取值为0(文件开头)1(使用当前读写位置)2(文件末尾)

相对当前读写位置或文件末尾进行位移操作,需以二进制形式打开文

with open('file.txt','rb') as f:
    f.seek(5,0)
    f.seek(3,1)

3.文件与目录管理

删除文件 ——os.remove ( 文件名 )
文件重命名 ——os.rename ( 原文件名 , 新文件名 )
创建 / 删除目录 ——os.mkdir( 目录名 )/os.rmdir( 目录名 )
获取当前目录 ——os.getcwd()
更改默认目录 ——os.chdir( 路径名 )
获取目录列表 ——os.listdir( 目录 / 路径)

4.数据维度与数据格式化

(1)数据存储

一维数据线性排列,用特殊字符分隔

注意:

同一或同组文件使用同一分隔符

分隔数据的分隔符不应出现在数据中

分隔符为英文半角,不使用中文符号

CSV(字符分隔值)格式:

纯文本存储

每一行对应一条数据

每条记录由一个或多个字段组成

字段之间用逗号(英文、半角)分隔

(2)数据读取

csv_file = open('score.csv')
lines = []
for line in csv_file:
		line = line.replace('\n','')
		lines.append(line.split(','))
print(lines)
csv_file.close()

(3)数据写入

(4)格式化

规则例子
数据存储在键值对key:value)中姓名: “张华
数据的字段由逗号分隔张华”, “语文”: “116”
一个花括号保存一个JSON对象{“姓名”: “张华”, “语文”: “116”}
一个方括号保存一个数组[{“姓名”: “张华”, “语文”: “116”}]

(5)json

函数

功能

dumps()

Python对象进行转码,将其转化为JSON字符串

import json
pyobj = [[1, 2, 3], 345, 23.12, 'qwe', {'key1':(1,2,3), 'key2':(2,3,4)}, True, False, None]
jsonstr = json.dumps(pyobj)
print(jsonstr)
[[1, 2, 3], 345, 23.12, "qwe", {"key1": [1, 2, 3], "key2": [2, 3, 4]}, true, false, null]

loads()

JSON字符串解析为Python对象

import json
jsonstr = [[1, 2, 3], 345, 23.12, "qwe", {"key1": [1, 2, 3], "key2": [2, 3, 4]}, true, false, null]
pydata = json.loads(jsonstr)
print(pydata)
[[1, 2, 3], 345, 23.12, 'qwe', {'key1': [1, 2, 3], 'key2': [2, 3, 4]}, True, False, None]

Python对象

JSON数据

dict

object

list,tuple

array

str,unicode

string

int,long,float

number

True

true

False

false

None

null

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值