Python从入门到实战(六)——文件

Python从入门到实战(一)——Python基础
Python从入门到实战(二)——程序流程控制
Python从入门到实战(三)——组合数据类型
Python从入门到实战(四)——函数
Python从入门到实战(五)——模块和包
Python从入门到实战(六)——文件
Python从入门到实战(七)——面向对象
Python从入门到实战(八)——异常
Python从入门到实战(九)——多线程
Python从入门到实战(十)——爬虫

文件基础操作

什么是文件

文件是存储在外部介质上的数据集合,与文件名相关联。

按文件中的数据组织形式可以把文件分为两类:

  • 文本文件
  • 二进制文件

文件的打开和创建

文件变量名 = open(文件名[,打开方式[,缓冲区]])
示例如下

f1 = open('file1.txt','r') # 以只读方式打开
f2 = open('file2.txt','w') # 打开一个文件只用于写入

在这里插入图片描述


文件的打开方式

在这里插入图片描述
在这里插入图片描述


字符编码

编码是用数字来表示符号和文字的一种方式,是符号、文件存储和显示的基础。
在这里插入图片描述


文本文件的写入

在这里插入图片描述
在这里插入图片描述
文件指针的移动

  • 写入文件后,必须打开才能读取写入的内容
  • 读取文件后,无法再次读取读过的内容
  • seek(n),其中n>=0,seek(0)表示文件指针移到文件头,n>0,表示移动到文件头之后的位置,从任意位置读取内容或从任意位置覆盖内容时需要这样做。
  • seek(0,2)表示把文件指针移到文件尾,在追加新内容时需要这样做。

在这里插入图片描述


示例
把字符串 软通动力123@isoftstone 用UTF-8编码写入文件5_1.txt中,并显示文件的长度(总字节数)

s = '软通动力123@isoftstone\n'
f.write(s)
f.seek(0, 2) # 把文件指针移到文件尾
length = f.tell() # 文件尾的位置,其值刚好等于文件长度(字节数)
f.close()
print('文件长度=',length)

在这里插入图片描述
把文件5_1.txt中的”动力“替换为”教育“,再把”1“替换为”9“,最后在文件末尾增加”软件学院“。

# 把文件5_1.txt中的"动力"替换为"教育",再把"1"替换为9,最后在文件末尾增加“软件学院”
import codecs
# coding = gbk
f = codecs.open('5_1.txt','r+','gbk')
f.seek(4) # 文件指针移到'动'的首字节上,一个中文占2个字节
f.write('教育') # 用'教育'覆盖'大学'
f.seek(8) # 文件指针移到'1'上
f.write('9') # 用'9'覆盖'1'
f.seek(0, 2) # 文件指针移到文件尾
f.write('软件学院') # 增加新内容
f.close()

在这里插入图片描述
把王之涣的古诗《登鹳雀楼》按行写入文件5_2.txt中。

# 把王之涣的古诗《登鹳雀楼》按行写入文件5_2.txt中。
lst = ['白日依山尽\n','黄河入海流\n','欲穷千里目\n','更上一层楼']
f = open('5_2.txt','w')
f.writelines(lst)
f.close()

在这里插入图片描述


文件的关闭

在这里插入图片描述


文本文件读取

在这里插入图片描述
这里其实有点问题,对于二进制文件,每次是读size个字节,但对于文本文件,是读size个字符。


示例
读取文件5_1.txt的前9个字节,并显示

# 读取文件5_1.txt的前9个字节,并显示
f = open('5_1.txt','r')
s = f.read(9) # 读取文件的前9个字符
f.close()
print('s=',s)
print('字符串s的长度(字符个数)=',len(s))

在这里插入图片描述
读取文件5_1.txt的全部内容,并显示

# 读取文件5_1.txt的全部内容,并显示
f = open('5_1.txt','r')
s = f.read() # 默认读取文件全部内容
f.close()
print('s=',s)

在这里插入图片描述
使用readline()读取文件5_2.txt的每一行,并显示

# 使用readline()读取文件5_2.txt的每一行,并显示
import codecs
f = codecs.open('5_2.txt','r')
while True:
    line = f.readline()
    if line == '':
        break
    print(line,end = '')
f.close()

在这里插入图片描述


二进制文件写入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


示例
把1个整数,1个浮点数,1个布尔型对象,1个字符串,存入二进制文件 5_3.dat中

# 把1个整数,1个浮点数,1个布尔型对象,1个字符串,存入二进制文件 5_3.dat中
import struct
n = 102400000
x = 10.24
bl = True
s = '软通动力123@isoftstone'
sn = struct.pack('if?',n,x,bl) # 'if?'表示要转换的类型
# 把整数n,浮点数x,布尔对象b依次转换为字节串
# print(sn)
f = open('5_3.dat','wb')
f.write(sn) # 写入字节串
b = s.encode('UTF-8') #字符串编码(encode)为 bytes
f.write(b)
f.close()

把1个整数、1个浮点数、1个字符串、1个列表、1个元组、1个集合、1个字典写入二进制文件

# 把1个整数、1个浮点数、1个字符串、1个列表、1个元组、1个集合、1个字典写入二进制文件F7_5.dat中
import pickle
f = open('5_4.bat','wb')
n = 7
i = 102400000
a = 10.24
s = '软通教育123abc'
lst = [[1,2,3],[4,5,6],[7,8,9]]
tu = (-5,10,8)
coll={4,5,6}
dic = {'a':'apple','b':'banana','g':'grape','o':'orange'}
try:
    pickle.dump(n,f) # 表示后面将要写入的数据个数
    pickle.dump(i,f) # 把整数i转换为字节串,并写入文件
    pickle.dump(a,f) 
    pickle.dump(s,f)
    pickle.dump(lst,f)
    pickle.dump(tu,f)
    pickle.dump(coll,f)
    pickle.dump(dic,f)
except:
    print('写文件异常!') # 如果写文件异常则跳转到此处执行
f.close()

structpack函数需要指定转换的类型,而pickledump函数不需要指定转换的类型。


二进制文件读取

在这里插入图片描述
在这里插入图片描述
读取二进制文件5_3.dat中的数据,并显示

# 读取二进制文件5_3.dat中的数据,并显示
import struct 
f = open('5_3.dat','rb')
sn = f.read(9)
tu =  struct.unpack('if?',sn)
# 从字节串sn中还原出1个整数、1个浮点数和1个布尔值,并返回元组
print(tu)
n = tu[0]
x = tu[1]
bl = tu[2]
print('n=', n)
print('x=', x)
print('bl=', bl)
s = f.read()
print('s=',s.decode('UTF-8')) 
f.close()

在这里插入图片描述


在这里插入图片描述
读取二进制文件5_4.bat中的数据,并显示

# 读取二进制文件5_4.bat中的数据,并显示
import pickle
f = open('5_4.bat','rb')
n = pickle.load(f) # 读取文件的数据个数
i = 0
while i<n:
    x = pickle.load(f)
    print(x)
    i += 1
f.close()

在这里插入图片描述


一维数据处理

一维数据的写入处理

  • 采用空格方式将数据写入文件
# 采用空格分隔方式将数据写入文件
ls = ['中国','美国','德国']
f = open('1.txt','w')
f.write(' '.join(ls))
f.close()

在这里插入图片描述

  • 采用特殊符号分隔方式将数据写入文件
# 采用特殊符号分隔方式将数据写入文件
ls = ['中国','美国','德国']
f = open('2.txt','w')
f.write('&'.join(ls)) # 用'&'分隔
f.close()

在这里插入图片描述

一维数据的读入处理

  • 从空格分隔的文件中读入数据
# 从空格分隔的文件中读入数据
f1 = open('1.txt','r')
txt = f1.read()
f1.close()
ls = txt.split()
print(ls)

在这里插入图片描述

  • 从特殊符号分隔的文件中读入数据
# 从特殊符号分隔的文件中读入数据
f1 = open('2.txt','r')
txt = f1.read()
f1.close()
ls = txt.split('&')
print(ls)

在这里插入图片描述


二维数据处理

二维数据的写入处理

# 二维列表
ls = [['1701','Zhangsan','男','19'],
      ['1702','Lily','女','18'],
      ['1703','Marry','女','19']]
fo = open('3.txt','w')
for item in ls:
    fo.write(','.join(item)+'\n')
fo.close()

在这里插入图片描述

二维数据的读入处理

fo = open('3.txt') # 默认为 'r'
ls = []
for line in fo:
    line = line.replace('\n','')
    ls.append(line.split(','))
fo.close()
print(ls)

在这里插入图片描述


CSV文件格式读写

CSV数据存储格式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


写入CSV文件

利用csv模块的writer函数进行写入

import csv

lst = [('北京','101.4','120.7','121.4'),
       ('上海','102.5','121.7','120.4'),
       ('广州','100.5','122.7','123.4')]
f = open('test.csv','w+',newline='')
w = csv.writer(f)
print(type(w))

for l in lst:
    w.writerow(l)

f.close()

在这里插入图片描述


读入CSV文件

利用csv模块的reader函数

import csv

f = open('test.csv','r+')
r = csv.reader(f)

for x in r:
    print(','.join(x))

f.close()

在这里插入图片描述


文件与文件夹的管理

主要使用os模块

文件的相关操作

  1. 文件重命名:os.rename()
os.rename('毕业论文.txt','毕业论文-最终版.txt')
  1. 删除文件:os.remove()
os.remove("毕业论文.txt")

文件不存在会报错
在这里插入图片描述

  1. 判断文件是否存在:os.access()
os.access('python3.dll',os.F_OK)

os.access()还可以用于判断其他的
在这里插入图片描述
在这里插入图片描述


文件夹的相关操作

  1. 创建文件夹:os.mkdir()
os.mkdir("张三")

在这里插入图片描述
文件夹已存在会报错
2. 获取当前目录os.getcwd()

os.getcwd()

在这里插入图片描述

  1. 改变默认目录 os.chdir()
os.chdir('../')

在这里插入图片描述

  1. 获取目录列表os.listdir()
os.listdir("./")

在这里插入图片描述
既有文件,也有文件夹
5. 删除文件夹 os.rmdir()

os.rmdir("张三")

在这里插入图片描述
文件夹不存在会报错


上述只介绍了一些常使用的,以后有需要可以自己查文档找合适的方法使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值