Python 文件与数据格式

1. 文件概述

1.1 文件类型

文本文件:存储文本字符

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

二者划分基于数据逻辑存储结构而非物理存储结构

1.2 标准文件

导入sys模块后即可进行操作

  • stdin(标准输入文件)标准输入文件对应输入设备,如键盘。
  • stdout(标准输出文件)
  • stderr(标准错误文件)标准输出文件和标准错误文件对应输出设备,如显示器。

eg:

import sys
file = sys.stdout
file.write("hello")

结果如下:

1.3 文件的基本操作

1.3.1 打开文件

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

  •  file:文件的路径。
  • mode:设置文件的打开模式,取值有r、w、a。

r:以只读方式打开文件(mode参数的默认值)。

w:以只写方式打开文件。

a:以追加方式打开文件。

b:以二进制形式打开文件。

+:以更新的方式打开文件(可读可写)

  • buffering:设置访问文件的缓冲方式。取值为0或1。

打开模式

名称

描述

r/rb

只读模式

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

w/wb

只写模式

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

a/ab

追加模式

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

r+/rb+

读取(更新)模式

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

w+/wb+

写入(更新)模式

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

a+/ab+

追加(更新)模式

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

eg: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

若不成功则会抛出异常,打印错误信息 

1.3.2 关闭文件

1)close()方法

close()方法是文件对象的内置方法。语法格式如下

file.close()

2)with语句

 with语句可预定义清理操作,以实现文件的自动关闭。语法格式如下:

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

        pass 

eg:

import random
import string
def c():
	MAC='01-AF-3B'	    
	h=string.hexdigits	
	for i in range(3):		
		n=random.sample(h,2)		
		sn='_'+''.join(n).upper()	
		MAC+=sn
	return MAC
def a():		
	with open('mac.txt','w') as f:	
		for i in range(100):
			mac = c()
			print(mac)
			f.write(mac+'\n')

 结果如下:

1.4 文件的读写

1.4.1读取文件:read()、readline()、readlines()方法

1)read() 方法

从指定文件中读取指定字节的数据,基本语法如下:

read(n=-1)

 eg:

with open('file.txt', mode='r') as f:
    print(f.read(2))   					
    print(f.read())    

2)readline()方法

从指定文件读取一行数据,基本格式如下:

readline()

eg:

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

3)readlines()方法

一次读取文件中的所有数据,读取成功则会返回一个列表,文件中的每一行对应列表中的一个元素

基本格式为:

readlines(hint=-1)

  • 参数hint的单位为字节,用于控制要读取的行数
  • 如果数据的总大小超出了hint字节,函数将不会读取更多的行

eg:

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

1.4.2写文件:write()、writelines()方法

     1)write()方法

将指定字符串写入文件。其语法格式如下:

write(data)

  • 若数据写入成功则返回本次写入文件的数据的字节数

 eg:

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(lines)

  • lines表示要写入文件的数据,可以是一个字符串或者字符串列表
  • 若文件的数据在文件中需要换行,需要指定换行符

 eg:

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)

1.5 文件的编码方式

文本文件支持多种编码方式,不同的编码方式下的字符与字节的对应关系不同,如下表:

编码方式

语言

字符数

字节数

ASCII

中文

1

2

英文

1

1

UTF-8

中文

1

3

英文

1

1

Unicode

中文

1

2

英文

1

2

GBK

中文

1

2

英文

1

1

1.6 文件的定位读写

       每一个文件对象都有一个文件读写位置的属性,该属性会记录当前读写位置,当文件读写位置默认为0时即在文件首部。tell()、seek()实现文件的定位读写。

1)tell()方法

获取文件当前的读写位置

eg:

with open('file.txt') as f:
    print(f.tell())				
    print(f.read(5))				
    print(f.tell())	

2)seek()方法

控制文件的读写位置,实现文件的随机读写;调用成功后会返回当前读写位置。其格式如下:

seek(offset,from)

  • offset:表示偏移量,即读写位置需要移动的字节数
  • pfrom:用于指定文件的读写位置,该参数的取值为0、1、2。

(0:表示文件开头;1:表示使用当前读写位置;2:表示文件末尾。)

eg:

with open('file.txt') as f:
    print(f.tell())					
    print(f.read(5))				
    print(f.tell())	

       若打开的是文本文件,那么seek()方法只允许相对于文件开头移动文件位置,若在参数from值为1、2的情况下对文本文件进行位移操作,将会产生错误。

eg:

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

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

eg:

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

1.7 文件与目录管理

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值