文件与数据格式化

一、文件的类型:

1.文件时数据的抽象和集合

  • 文件是存储在辅助存储器上的数据序列
  • 文件时数据存储的一种形式
  • 文件时数据存储的一种形式

2.文本文件和二进制文件

  • 文本文件和二进制文件值是文件的展示方式
  • 本质上,所有文件都是二进制形式存储
  • 形式上,所有文件采用两种方式展示

3.文本文件

  • 由单一特定编码组成的文件,如UTF-8编码
  • 由于存在编码,也被看成是存储着的长字符串
  • 适用于例如:.txt文件、.py文件

4.二进制文件

  • 直接由比特0和1组成,没有字符编码
  • 一般存在二进制0和1的组织结构,即文件格式
  • 适用于例如:.png文件、.avi文件等

二、标准库OS常用命令

  • os模块为许多操作系统函数提供了统一的接口。
  • 这个模块中的大部分函数通过对应平台相关模块实现, 比如 posixnt. os 模块会在第一次导入的时候自动加载合适的执行模块.
import os    # 导入模块
os.getcwd() # 查看当前路径
os.chdir('D:\\my_files') # 修改当前路径

'D:\\my_files'
os.mkdir("my_file") # 在当前目录下建一个子文件夹,已存在时会报错
os.mkdir("my_file2")
os.listdir()   # 查看当前文件夹下的子文件夹

['my_file', 'my_file1']
os.rmdir(' my_file2')   # 删除文件夹,文件不存在时会报错
os.remove('a.py ') # 删除一个文件
os.rename('my_file','my_file.doc')  # 改变文件的名字

for i in os.listdir():
    os.rename(i,'great_'+ i)   # 更改当前文件夹下的所有子文件夹的名字

三、文件的打开与关闭

1.open()函数提供7中基本的打开模式

打开模式含义
‘r’只读模式,如果文件不存在,返回异常FileNotToundError,默认值
‘w’覆盖写模式,文件不存在则创建,存在则完全覆盖源文件
‘x’创建写模式,文件不存在则创建,存在则返回FileExistsError
‘a’追加写模式,文件不存在则创建,存在则在源文件最后追加内容
‘b’二进制文件模式
‘t’文本文件模式,默认值
‘+’与r/w/x/a一同使用,在原功能基础上增加同时读写功能
typeinfo
r以只读方式打开文件。文件的指针在文件开头,默认模式
w打开文件只用于写入。若文件存在则覆盖,不存在则创建
a打开文件用于追加。若文件存在,指针会在文件结尾,若文件不存在,创建新文件写入
rb以二进制格式打开一个文件同于只读。文件指针在文件开头
wb以二进制格式打开文件只用于写入。若文件存在则覆盖,不存在则创建新文件
ab以二进制格式打开文件用于追加。若文件存在指针在文件结尾,若文件不存在则创建新文件写入
r+打开一个文件用于读写,文件指针在文件开头
w+打开一个文件用于读写。若文件已存在则将其覆盖,不存在则创建新文件
a+打开一个文件用于读写。若文件已存在,文件指针会放在文件结尾。文件打开时会是追加模式
rb+以二进制格式打开一个文件用于读写。文件指针在文件开头
wb+以二进制格式打开一个文件用于读写。覆盖写模式
ab+以二进制格式打开一个文件用于追加。追加写模式

2.文件关闭 f.close()

程序执行完毕后,系统会关闭由该程序打开的文件,但更好的做法是在文件使用完毕后,由程序调用close()方法关闭文件。

实际上,计算机中可打开的文件数量是有限的,每打开一个文件,就会占用一个“名额”,当“名额”耗尽后系统可能无法打开新文件,此外,当文件以缓冲方式打开时,磁盘文件与内存间的读写并不是及时的,若程序因异常关闭,可能导致缓冲区中的数据无法写入文件,造成数据丢失。

因此,文件使用完毕后,及时使用close()关闭文件是有必要的

f = open('b.txt','r')  # 只打开存在的文件,还没有创建文件时会报错
f.close()
f = open('b.txt','w')  # 创建了b.txt文件用于覆盖写
f = tell()  # 0 当前光标的位置为0
f.write('hello world")  # 在b.txt文件里写入hello world
f.read()   # 不可读,报错
f.close()

f = open('b.txt','x')   # b.txt文件已存在,会报错
f = open('b.txt','r')
f.read()   # 'hello world'  读出文件的内容
f.read()  #  ''   读完一次后,指针位于文档最后,再次读内容为空
f.close()
f.close()
f = open('b.txt','r')
f.read()      # 'hello world'  关闭文件后再打开,指针回到文档起点

由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用了,为了保证无论是否出错都能正确关闭文件,使用try … finally 来实现:

try:
    f = open('/path/to/file','r')
    print(f.read())
finally:
     if f:
        f.close()

但是每次这么写太过繁琐,Python引入了with语句来自动帮我们调用close(0方法:

with open('/path/to/file','r') as f:
          print(f.read())

3. f.read ()读取全部文件内容

这和try … finally 是一样的,但是代码更简洁,并且不必调用f.close()方法

  • 调用read()会一次读取文件的全部内容,如果文件有10G,内存就爆了
  • 保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容
  • 调用readline()可以每次读取一行内容,调用readline()一次读取所有内容并按行返回list。因此要根据需要觉得怎么调用
  • 如果文件很小,read()一次性读取最方便;若果不确定文件大小,反复调用readl(size)比较保险;如果是配置文件,调用readline()最方便
#把末尾的'\n'在strip() 函数中可以把目标内容line里所有的空格,空行等都删掉,只剩余文字内容

for line in f.readline():
       print(line.strip())
f = open('b.txt')
f.read(5)    # 'hello'  从b.txt中读取5个字符
f.read(2)   # ' w'    从上次读取的地方继续往后读取两个字符

4. f.tell()

用户通过tell()方法获取当前的读写位置

f = open('b.txt')
f.tell()    # 0   打开文件后,磨人的读写位置为0
f.read(3)   #  'hel'
f.tell()   # 3

5. f.seek()

一般情况下,文件的读写是顺序的,但并非每次的读写都需要从当前位置开始,python提供了seek方法可控制文件的读写位置,实现文件的随机读写

seek(offset,from)

offset 表示偏移量,即读写位置需要移动的字节数;from用于指定文件的读写位置,改参数取值0、1、2代表含义如下:

  • 0:表示文件开头
  • 1:表示使用当前读写位置
  • 2:表示文件末尾
f = open('b.txt','w')
f.tell()   # 0
f.write('hello world')
f.close()

f = open('b.txt','a+')
f.read()   # ''  追加读写模式,指针在文件末尾
f.seek(0,0)    # 0  将指针移到文件开头
f.read()     # 'hello world'   从开头读取文件内容
f.seek(3,0)  # 3 将指针移到第三个字符后
f.read()  # 'lo world'  从第三个字符后开始读取文件内容
f.close()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值