文件简介:文件是存储在外部介质上一组相关信息的集合。计算机文件分为文本文件(.txt、.py)和二进制文件(.jpg、mp3)两种
1. 文件操作
1.1. 打开文件
- open()函数:
- 文件对象 = open(文件说明符,[打开方式])
- 文件说明符指定打开的文件名,可以包含完整路径(注意两种OS中的文件名的写法)
# 下列语句中,可用于读取当前目录下的data目录中的file.txt文件的是() # 1、在Windows系统中: with open('data\\file.txt', 'r') as f: # 2、在Linux系统中 with open('data/file.txt', 'r') as f:
- 打开方式包含读、写、追加
打开方式 | 说明 |
---|---|
r | 打开文件读(文件不存在,报错) |
w | 打开文件写(存在就覆盖,不存在就新建) |
a | 打开文件追加(不存在就新建,存在就追加) |
r+ | 打开文件读写 |
w+ | 打开文件读写(不存在就新建,存在就覆盖) |
a+ | 打开文件读写(不存在就新建,存在就追加) |
1.2. 关闭文件
- close() 可用于关闭文件
- 文件打开后一定要关闭,关闭文件可以确保内存缓存的数据刷新到文件,打开文件太多不关闭可能会导致不能打开新的文件,导致内存的严重浪费
- python 可以使用 try … finally,但是每次这样写太过繁琐,所以提供了自动关闭文件的写法
- with open(文件名,打开方式) as 别名
- 别名.文件读写函数
with open('hello.txt', 'w') as f: f.write('Hello, world!') # 覆盖
1.3. 读文本文件
- read()
- 带一个参数控制读取的字符数量
- 参数填 0 ,表示读取整个文件
- readline()
- 读取一行
- readlines()
- 读取所有行到列表
1.4. 写文本文件
- write()
- 参数是字符串,将字符串写入文件
- writelines()
- 参数是列表,将列表中的字符串全部写入到文件
注意:
- 文件对象的 flush方法用于将缓冲区的内容写入文件,但是不关闭文件
- 写模式(‘w’)打开的文件无法进行读操作
- read方法的参数用于表示读取的字符个数,如果调用时该参数省略,表示读取全部字符。
- 以’w’模式打开文件进行写入时,write()函数传入的参数类型必须是字符串
- readline函数表示读取文件的下一行,返回一个字符串
2、编程练习
题目描述:有一个文本文件 Numbers.txt,文件中的每一行都是一个浮点数,编
写程序读取出所有的浮点数。要求:
1 从小到大排序,将排序后的结果写到当前路径下新生成的一个文本文件
Sort.txt 中,每个数占一行。
2 求出这些数字的均值、方差,将结果追加写到当前路径下新生成的一个文本
文件 Sort.txt 中,每个数占一行。
3 要求生成的文本文件 Sort.txt 中同时包含排序和均值、方差的结果
Numbers.txt
12.3
13.5
11.4
11.4
15.2
10.9
6.5
2.4
4.3
17.8
16.2
1.3
import math
with open('numbers.txt', 'r') as numbers:
num = numbers.read()
# 按回车分隔
nums = num.split()
result = []
# 将结果集转换为浮点数集
for num in nums:
result.append(float(num))
# 排序
result = sorted(result)
# 均值与方差
avg = 0.0
s = 0.0
for num in result:
avg += num
avg = avg / len(result)
result.append(avg)
for num in result:
s += math.pow(num-avg,2)
s = avg / len(result)
result.append(s)
# 存入 Sort.txt
with open('Sort.txt', 'a') as Sort:
for num in result:
Sort.write(str(num))
Sort.write('\n')
参考文档:https://www.icourse163.org/learn/SUDA-1206947804?tid=1450431473&from=study#/learn/content?type=detail&id=1214940648&cid=1219118256