0%

第三周-模块文件操作

文件操作

从文件中读取

text.txt

1
2
3
4
5
hello world
python java c c++
for f serj eoifjwefj;asf
aefdeoifjeoifzsfkskfdjasofwqkqjz;ovjzpjvnnbaeawkoijq

read

不加限制就是全部读取文件

1
2
f = open("text.txt", "r")
print(f)

输出

1
2
3
4
5
hello world
python java c c++
for f serj eoifjwefj;asf
aefdeoifjeoifzsfkskfdjasofwqkqjz;ovjzpjvnnbaeawkoijq

读取指定长度

1
print(f.read(2))

输出

1
he

注:read移动的是文件指针,一开始写成这样结果发现后面什么都没有读到,因为文件指针已经读到末尾了

1
2
3
4
5
6
7
f = open("text.txt", "r")
print(f"全部读取\n{f.read()}")
#f.seek(0)
print(f"读取前两个字符\n{f.read(2)}")
#f.seek(0)
print(f"读取前10个字符\n{f.read(10)}")
f.close()

输出

1
2
3
4
5
6
7
8
9
10
全部读取
hello world
python java c c++
for f serj eoifjwefj;asf
aefdeoifjeoifzsfkskfdjasofwqkqjz;ovjzpjvnnbaeawkoijq

读取前两个字符

读取前10个字符

要将文件指针复位

1
2
3
4
5
6
7
f = open("text.txt", "r")
print(f"全部读取\n{f.read()}")
f.seek(0)
print(f"读取前两个字符\n{f.read(2)}")
f.seek(0)
print(f"读取前10个字符\n{f.read(10)}")
f.close()
1
2
3
4
5
6
7
8
9
10
全部读取
hello world
python java c c++
for f serj eoifjwefj;asf
aefdeoifjeoifzsfkskfdjasofwqkqjz;ovjzpjvnnbaeawkoijq

读取前两个字符
he
读取前10个字符
hello worl

用for循环就会一行一行读

1
2
for i in f:
print(f)

输出

1
2
3
4
5
6
7
8
9
for循环
hello world

python java c c++

for f serj eoifjwefj;asf

aefdeoifjeoifzsfkskfdjasofwqkqjz;ovjzpjvnnbaeawkoijq

总结:如果读取多次,下次读取是从上次读取结束的位置开始读取

readline

一行一行读

1
2
f = open("text.txt", "r")
content = f.readline()

输出

1
hello world

如果限制字符数就读取一行中限制字符数

1
2
3
f = open("text.txt", "r")
content = f.readline(3)
print(content)

输出

1
hel

for循环逐个打印文件中一行中字符

1
2
3
f = open("text.txt", "r")
for content in f.readline():
print(content)

输出

1
2
3
4
5
6
7
8
9
10
11
h
e
l
l
o

w
o
r
l
d

readlines()

不加限制就是读取文件中全部行,将每一行作为列表中一个元素,最终保存到一个列表里

1
2
3
f = open("text.txt", "r")
content = f.readlines()
print(content)

输出

1
['hello world\n', 'python  java c c++\n', 'for f serj eoifjwefj;asf\n', 'aefdeoifjeoifzsfkskfdjasofwqkqjz;ovjzpjvnnbaeawkoijq\n']

读取xlsx文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import openpyxl

def readExcel(file_path):
wb = openpyxl.load_workbook(file_path)
sheet = wb.active
# sheet = wb.active 这行代码的作用是获取 Excel 工作簿(Workbook)中的活动工作表(Sheet)。在一个 Excel 文件中,可以包含多个工作表,而 active 方法用于获取当前活动的工作表,即当前被选中的工作表。

for row in sheet.iter_rows():
for cell in row:
print(cell.value, end=" ")
print()

print(readExcel(r"D:\HuaweiMoveData\Users\piolet\Desktop\寒假每天任务记录.xlsx"))

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
日期 正式工作时间 蓝桥杯(5:30-11:30)目标4) 科研(13:00-18:00, 19:00-20:00,目标6h) 数模(21:00-23:00,目标2) 开小差次数 手机使用时间 总工作时间 None 
1.13 05:28:00 4 None None 1 2h28min None None
1.14 05:30:00 4,明天从
https://blog.csdn.net/weixin_43914593/article/details/133969568开始做 3,明天继续看https://zh.d2l.ai/chapter_linear-networks/softmax-regression.html#equation-eq-softmax-y-and-o留下来的一点小尾巴,然后要从https://zh.d2l.ai/chapter_linear-networks/softmax-regression-concise.html#sec-softmax-concise和https://zh.d2l.ai/chapter_multilayer-perceptrons/mlp-concise.html开始看,争取一天看完动手深度学习 None 1 2h23min 7 None
1.15 05:36:00 3 4 2 1 2h41min 9 None
1.16 05:35:00 5 3 1 2 2和4min 9 None
1.17 05:45:00 0 8 0 0 2h40min 8 None
1.18 05:32:00 5 4.5 1.5 1 1h55min 11 None
1.19 05:25:00 1 5 0 6 5h 6 None
1.2 06:40:00 维护博客3h 0 3 0 5h 6 None
1.21 05:39:00 6 0 0 5 6h8min 6 None
1.22 05:22:00 5 4 2 4 2h30min 11 None
日期 正式工作时间 科研(5:30-11:30,目标4) 蓝桥杯(13:30-6:30,目标4) 数模(19:00-20:00,21:00-23:00,目标3) 开小差次数 手机使用时间 总工作时间 运动次数
1.23 05:30:00 4 4 2 5 None None 2
None

写入xlsx文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import openpyxl

def writeExcel(path, data):
"""
:param path: 写入数据的文件路径
:param data: 要写入到文件里数据
:return:
"""
wb = openpyxl.Workbook()
sheet = wb.active

for row in data:
sheet.append(row)

wb.save(path)

# 调用函数
path = 'D:\\yaoming.xlsx'
writeExcel(path, [['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']])

应用---制作文件的备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
任务描述:
输入文件名字,然后程序自动完成对该文件的备份操作:

"""
分析:
input--->string
打开需要备份的文件
存在
读取打开需要备份文件数据
关闭需要备份文件
不存在

实现备份
1.定义备份文件的规则
2.将备份文件数据写入到新文件里面
3.关闭新文件
"""
import os.path
def copy(path): #path需要备份文件路径
#打开需要备份的文件
oldFileName = input('请输入你要备份文件的名称:')
#打开文件
fileName = open(oldFileName,'r')
#判断文件是否打开
if fileName:
#获取备份的文件名
copyFile = oldFileName.rfind('.')
name = oldFileName[0:copyFile]
#splitText获取文件名和扩展名
fileFlag = os.path.splitext(path)[1]

#定义新文件备份规则
newFileName = name+'-副本'+fileFlag
#打开新文件
newFile = open(newFileName,'w')

#读取旧文件数据,一行行往新文件里面写入
for line in fileName.readlines():
newFile.write(line)
#关闭文件
fileName.close()
newFile.close()
else:
print('没有文件打开')
#调用函数
copy('text.txt')

文件的定位读写

获取当前读写文件的位置

1
2
3
4
5
f = open('text.txt','rb')
str = f.read(3)
print('读取的数据是:',str)
position = f.tell()
print('读取的位置是:',position)

输出

1
2
3
读取的数据是: b'hel'
读取的位置是: 3

定位到某一个位置

定位到某一个位置

文件的重命名

1
2
import os
os.rename("test.txt","毕业论文.txt")

文件的删除

1
2
import os 
os.remove("待删除文件夹名")

文件夹操作

创建

1
2
import os
os.mkdir("新文件夹名")

获取当前的目录

1
2
import os
print(os.listdir("./"))

删除文件夹

1
2
import os
os.rmdir("待删除文件夹名")

应用----批量修改文件名(重命名)

StringIO和BytesIO

StringIO

BytesIO