Python学习-6.文件操作

一、文件的使用

1.1 文件的类型

  • 文件的两种类型
    ①文本文件:由单一特定编码的字符组成。例如TXT文件
    ②二进制文件:二进制文件直接由0和1组成,文件内部数据的组织格式与文件用途有关。例如视频、图片。

Python对文本文件和二进制文件都有统一的操作步骤,即“打开-操作-关闭”
操作文件的流程

1.2 文件的打开

内置函数open()可以用指定模式打开指定文件并创建文件
使用方法:变量名=open(文件路径及文件名,打开模式)
注:路径中由于\是转义符,需要改为\或/,另外路径有绝对路径和相对路径。例如D:\\program\\a.txt为绝对路径,直接指向文件所在地址。而只写a.txt的话,就是相对路径,程序会在编译器所在的地址查找a.txt文件。
打开模式

  • a模式示例

a.txt中只有字样Python
此时a.txt中只有Python字样
运行以下代码

f=open('D:\\a.txt','a')
f.write('是世界上最好的语言')
f.close()

a.txt变成如下字样
在这里插入图片描述

  • b模式和t模式
    Python默认为文本文件模式,也就是默认打开的是文本文件
    也就是说f=open('D:\\a.txt','a')等价于f=open('D:\\a.txt','at')
    当需要以二进制方式打开文件,需要加b模式,如下
f=open('D:\\a.txt','rb')
print(f.readline())
#输出
b'Python\xca\xc7\xca\xc0\xbd\xe7\xc9\xcf\xd7\xee\xba\xc3\xb5\xc4\xd3\xef\xd1\xd4'
  • +模式
    +模式可以增加读写功能
  • 文件的关闭
    文件使用结束后要用close()函数进行关闭,释放文件的使用授权

1.3 文件的读写

1.3.1 文件的读取

  • read()

f.read(size=-1):从文件中读入整个文件内容。参数可选,如果给出则读入前size长度的字符串或字符流。其结果是一个字符串

#直接输出
f=open('D:\\a.txt','r')
print(f)
--输出
<_io.TextIOWrapper name='D:\\a.txt' mode='r' encoding='cp936'>#若直接输出f,内容则为文件名和信息

#使用read()函数输出
f=open('D:\\a.txt','r')
print(f.read(10))
--输出
Python是世界上#输出前10个字符
  • readline()和readlines()
    ①f.readline(size=-1):从文件中读入一行内容。参数可选,如果给出则读入该行前size长度的字符串或字符流。其结果是一个字符串
    ②f.readlines(hint=-1):从文件中读入所有行,以每行为元素形成一个列表。参数可选,如给出,读入hint行。
    注:文件打开后,对文件的读写有一个读取指针,当文件中读入内容后,读取指针将向前进。若不关闭文件后重新读取,下一次读取的内容将从指针的新位置开始。
#readline()读取
f=open('D:\\a.txt','r')
print(f.readline())
print(f.readline())#第二次readline(),继续读取第二行。
--输出
L1:Python是世界上最好的语言
L2:Python是世界上最好的语言

#readlines读取
f=open('D:\\a.txt','r')
print(f.readlines())
print(f.read())#第一次读取时,文件已被读取完,因此第二次读取将返回空值
--输出
['L1:Python是世界上最好的语言\n', 'L2:Python是世界上最好的语言']
[]
  • seek()
    若需要多次读取过程中,每次读取都从文件开头读取,可以使用f.seek(offset):改变当前文件操作指针的位置,offset的值:0为文件开头;2为文件结尾
f=open('D:\\a.txt','r')
print(f.readlines())
f.seek(0)#使用seek改变指针位置至文件开头
print(f.read())
--输出
['L1:Python是世界上最好的语言\n', 'L2:Python是世界上最好的语言']
L1:Python是世界上最好的语言
L2:Python是世界上最好的语言
  • 遍历读取
    从文本文件中逐行读入内容并进行处理是一个基本的文件操作需求。文本文件可看成是由行组成的组合类型,因此,可以使用遍历循环逐行遍历文件。
f=open('D:\\a.txt','r')
for line in f: #此时的f相当于一个以每行文本作为元素的列表
   print(line,end='')
--输出
L1:Python是世界上最好的语言
L2:Python是世界上最好的语言   

1.3.2 文件的写入

  • write()
    f.write(s):向文件写入字符串s,每次写入后,将会记录一个写入指针。该方法可以反复调用,将在写入指针后分批写入内容,直至文件被关闭。
f=open('a.txt','w')#在相对路径下创建一个a.txt文件
f.write('L1:Python\n')
f.write('L2:Python')#写入两行数据
f.close()#关闭
a=open('a.txt','r')
print(a.read())#读取a文件
--输出
L1:Python
L2:Python
  • writelines()
    f.writelines(lines)可以直接将列表类型的lines的各元素连接起来写入文件f
line=['L11:Python\n',
      'L22:Python']
f=open('a.txt','w')
f.writelines(line)#将line列表写入f
f.close()
a=open('a.txt','r')
print(a.read())
--输出
L11:Python
L22:Python

二、数据的维度

2.1 三种维度

根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据。
在这里插入图片描述

  • 二维数据

也称表格数据,由关联关系数据构成,采用二维表格方式组织,对应于数学中的矩阵,常见的表格都属于二维数据。
在这里插入图片描述

  • 高维数据
    由键值对类型的数据构成,采用对象方式组织,可以多层嵌套
    在这里插入图片描述

2.2 存储方式

2.2.1 一维数据的存储方式
表示方式:一维数据在Python中主要采用列表形式表示。
存储方式:总体思路是采用特殊字符分隔各数据。
常用的存储方式:如下在这里插入图片描述
可以使用write(分隔符,join(列表))的方式将列表数据写入文件。

line=['北京','上海','重庆']
f=open('D:\\a.txt','w')
f.write(','.join(line))#将line使用join函数写入文件,并以,分隔
f.close()
a=open('D:\\a.txt','r')
print(a.read())
--输出
北京,上海,重庆

2.2.2 CSV存储格式(逗号分隔值)

一种通用的、相对简单的文件格式。存储的文件一版采用.csv为扩展名。一维数据保存为csv格式后,各元素采用逗号分隔,形成一行,在这里的逗号是英文逗号
在这里插入图片描述
将csv文件还原为数据,可以使用split函数进行切割
示例

#csv文件的写入
line = ['北京', '上海', '重庆']
f = open('D:\\a.csv', 'w+')#采用w模式,及+模式使其可读写操作
f.write(','.join(line))#使用join函数以,分隔写入f
f.seek(0)#为继续读取操作,将指针移到文件开头
#csv文件读取为列表
ls=f.read().split(',')#读取文件并以,切片
print(ls)
f.close()
--输出
['北京', '上海', '重庆']

2.2.3 二维数据的存储方式
表示方式:二维数据由多个一维数据组成,可以看做是一维数据的组合形式。因此二维数据可以采用二维列表来表示,即列表的每个元素对应二维数据的一行
存储方式:用csv格式文件存储,csv文件的每一行是一维数据,整个csv文件是一个二维数据
在这里插入图片描述

  • 二维列表存储至csv
ls = [['城市', '年份', '省份'],
        ['济南', '1989', '山东'],
        ['成都', '1967', '四川'], ]
f=open('D:\\a.csv','w')
for i in ls:
        f.write(','.join(i)+'\n')#\n的作用是换行
f.close()

输出的文件:
在这里插入图片描述

  • csv转化为二维列表
f=open('D:\\a.csv','r')#读取刚才的csv文件
ls=[]#创建空列表
for line in f:#读取f二维列表中的每一行
        ls.append(line.strip('\n').split(','))#strip将每行的\换行符去掉,split将每行按照','分隔形成一维列表,并使用append将该一维列表添加到ls里面
f.close()
print(ls)
--输出
[['城市', '年份', '省份'], ['济南', '1989', '山东'], ['成都', '1967', '四川']]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值