第七章 文件与数据格式化

一、文件概述

 

(一)文件标识

意义:找到计算机中唯一确定的文件。

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

(二)文件类型

分类:文本文件、二进制文件

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

     #二进制文件:不能直接使用文字处理程序正常读写。

如何划分:基于数据逻辑存储结构,计算机数据以二进制形式存储。

(三)标准文件

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

二、文件的基础操作

(一)文件的打开和关闭

1.打开文件

内置函数open()

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

【参数】

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

 【返回值】

  • 若open()函数调用成功,防护一个文件对象
  • open()函数调用成功,返回一个文件对
  • 若待打开的文件不存在,文件打开失败,程序会抛出异常,并打印错误信息

 2.关闭文件

(1)close()方法

  • close()方法是文件对象的内置方法。
file.close()

(2)with()方法

  • with句可预定义清理操作,以实现文件的自动关闭。
with open('a.txt') as f:
        pass

 (二)文件的读写

1.读取文件

(1)read()方法

read()方法可以从指定文件中读取指定字节的数据

格式:read(n=-1)

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

 (2)readline()方法

readline()方法可以从指定文件中读取一行数据

格式:readline()

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

(3)readlines()方法

 readlines()方法可以一次读取文件中的所有数据,若读取成功,该方法会返回一个列表,文件中的每一行对应列表中的一个元素

格式:readlines(hint=-1)              #hint单位为字节,用于控制要读取的行数

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

2.写文件

(1)write()方法

 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)						# 打印字节数

(2)writelines()方法

writelines()方法用于将行列表写入文件

格式:writelines(lines)                       #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)

3.文件的定位读写

(1)tell()方法 

tell()方法用于获取文件当前的读写位置

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

(2)seek()方法 

seek()方法可控制文件的读写位置,实现文件的随机读写

格式:seek(offset,from)

         #offset:读写位置需要移动的字节数 

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

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

 三、文件与目录管理

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

四、数据维度与数据格式化

维度的含义:是与事物“有联系”的概念的数量,事物可分为不同维度

(一) 基于维度的数据分类

一维数据具有对等关系的一组线性数据例如:一维元组、集合
二维数据关联参数的数量为2例如:矩阵、二维数组
多为数据利用键值对等简单的二院关系展示数据间的复杂结构例如:字典

 (二)一二维数据的存储与读写

1.数据存储

(1)一维数据:呈线性排列,一般用特殊字符分隔

空格分隔成都 杭州 重庆 武汉
逗号分隔成都,杭州,重庆,武汉
&分隔成都&杭州&重庆&武汉

一维数据存储注意事项:

  • 同一文件或同组文件一般使用同一分隔符分隔。
  • 分隔数据的分隔符不应出现在数据中。
  • 分隔符为英文半角符号,一般不使用中文符号作为分隔符。

 (2)二维数据:多条一维数据的集合,当二维数据只有一个元素时,这个二维数据就是一维数据

CSV(字符分隔值)格式规范:

  • 以纯文本形式存储表格数据
  • 文件的每一行对应表格中的一条数据记录
  • 每条记录由一个或多个字段组成
  • 字段之间使用逗号(英文、半角)分隔

2.数据读取

  • windows中CSV文件的后缀名为.csv,可以通过Excel或记事本打开
  • Python在程序中读取.csv文件后会以二维列表形式存储 
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.数据写入

将一、二维数据写入文件中,即按照数据的组织形式,在文件中添加新的数据

(三)多维数据的格式化

多维数据的格式化:为了直观地表示多维数据,三维及以上的多维数据统一采用键值对的形式进行格式化。

JSON(高维数据格式)语法规则:

  • 数据存储在键值对(key:value)中,例如:"a" : "b"
  • 数据的字段由逗号分隔,例如:"a" : "b" , "c" : "1"
  • 一个花括号保存一个JSON对象,例如:{"a" : "b" ,  "c": "1"}
  • 一个方括号保存一个数组,例如:[{"a" : "b" ,  "c": "1"}]

 1.JSON模块——json

函数功能
dumps()对Python对象进行转码,将其转化为JSON字符串
loads()将JSON字符串解析为Python对象

(1)dumps()函数

 用dumps()函数对Python对象进行转码

>>> 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]

 (2)loads()函数

用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]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值