文件函数

  • seekseek(参数1,参数2) - 能够将指针移动指定的偏移量
    参数1:移动的偏移量,默认为0参数20 - 将指针移动到文件开头
    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())
  • telltell() - 查看当前指针的位置
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文件的读写操作

  1. 返回一个文件对象
    windows或者Linus操作系统会自动创建\n,写文件必须加newline=''newline = '' —> 将换行\n转为空
f1 = open('./店铺信息.csv', 'w', encoding='utf-8', newline='')
print(f1)
  1. 创建写方法对象
mywrite = csv.writer(f1)        # 借助Python已经实现的CSV的模块实现想要实行的功能
  1. 写入列明
    单行写入:writerow()
col = ['店铺名', '人均', '口味', '环境', '服务']
mywrite.writerow(col)
  1. 写入对应信息
    多行写入: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可直接打开)

  1. 数据 —> 获取数据 —> 自文件 —> 从文本/CSV —> 在文件管理器中找CSV文件 —> 文件原始格式(UTF-8) —> 加载 —> 转换为区域
  2. (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()