文件函数
seek
seek(参数1,参数2)
- 能够将指针移动指定的偏移量参数1
:移动的偏移量,默认为0
参数2
:0
- 将指针移动到文件开头1
- (默认)- 指针指向当前位置2
- 指针移动到文件尾部
f1 = open('界面.txt', 'r', encoding='utf-8')
print(f1.read())
# 将指针再移动到文件开头
f1.seek(0, 0)
界面.txt
欢迎进入系统!
**************************
** 请选择对应功能: **
** 1. 登录 **
** 2. 注册 **
** 3. 退出系统 **
**************************
- 一个英文符号对应一个偏移量,一个汉字和一个中文符号对应3个偏移量
- Python中有序序列(容器)下标从0开始;
- Python操作文件时的偏移量从1开始
f1.seek(2, 0) # UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa2 in position 0: invalid start byte
f1.seek(6, 0) # 将指针移动到文件开头,再增加6个偏移量
print(f1.read())
tell
tell()
- 查看当前指针的位置
f1.tell()
print(f1.tell()) # 156+(7+8+11)*2=208 windows定义结束是\r\n
f1.close()
换行:
linux:\n
windows: \r\n
mac: \r
\r
不计入长度,\t
长度为1
转义字符有特殊含义时,长度为1;代表本身时,长度为2
CSV文件读写
CSV文件本质是文本文件,只是以表格的形式展示数据
写
import csv
- 使用CSV内置模块进行csv文件的读写操作
- 返回一个文件对象
windows或者Linus操作系统会自动创建\n
,写文件必须加newline=''
newline = ''
—> 将换行\n
转为空
f1 = open('./店铺信息.csv', 'w', encoding='utf-8', newline='')
print(f1)
- 创建写方法对象
mywrite = csv.writer(f1) # 借助Python已经实现的CSV的模块实现想要实行的功能
- 写入列明
单行写入:writerow()
col = ['店铺名', '人均', '口味', '环境', '服务']
mywrite.writerow(col)
- 写入对应信息
多行写入:writerows()
datas = [
['吼堂老火锅', 126, 4.5, 4.7, 4.6],
['小龙坎', 100, 4.8, '4.8', 4.7],
['巴蜀大宅门', '70', '4.8', '4.6', 4.8],
]
mywrite.writerows(datas)
f1.close()
读
CSV文件读操作
f2 = open('./店铺信息.csv', 'r', encoding='utf-8')
# 创建读方法
myreader = csv.reader(f2)
for i in myreader:
# print(i)
for j in i:
print('{:<8}'.format(j), end='')
print()
f2.close()
使用excel打开CSV文件(使用wps可直接打开)
- 数据 —> 获取数据 —> 自文件 —> 从文本/CSV —> 在文件管理器中找CSV文件 —> 文件原始格式(UTF-8) —> 加载 —> 转换为区域
- (encoding=‘utf-8-sig’ 打开的表格不会乱码) 小众
CSV文件操作-酒店平均分
import csv
# 必须
# 读数据
f1 = open('./北京高档酒店价格分析.csv', 'r', encoding='utf-8')
# 创建读文件的方法
read_data = csv.reader(f1)
data = list(read_data)
f1.close()
# 创建新文件
f2 = open('./北京酒店信息.csv', 'w', encoding='utf-8', newline='')
# 写方法
mywrite = csv.writer(f2)
data1 = [i for i in data[0]]
data1.append('平均评分')
mywrite.writerow(data1)
# 查看数据
for info in data[1:]:
# print(info)
score = round((float(info[3]) + float(info[4]) + float(info[5]) + float(info[6])) / 4, 2)
result = f'{info[0]}的平均分为:{score}'
# print(result)
# 将平均分重新写入文件
info.append(score)
mywrite.writerow(info)
f2.close()