day08 文本文件的操作及csv文件的操作
一、文本文件的操作
1.1open()和 close()方法
将数据从瞬时状态转换为持久状态
f = open(参数1,参数2,参数3…) - 打开文件,打开的是一个文件对象
- 参数1 :路径和文件名,注意文件后缀名一定不要忘记写
- 参数2: 文件打开的方式(读和写)(且有t文本、b字节两种格式)
- 参数3 :文件打开的编码形式(utf-8)
-
参数1 :
open(r’./test/文件1.txt’)
a. .表示当前文件夹(可以省略不写); …表示返回上一级
理清楚文件的层级关系,. :当前位置:文件所在的文件夹,… :上一级指当前文件夹再往上翻一下b. (mac)文件夹与文件夹之间需要使用\(反斜杠)隔开
c. 相对路径:以当前所找文件为参照物为基础,另一个文件相对于参照物的所在位置,应该使用/ (斜杠)
(经常使用相对路径,打包给别人,可以直接打开)
绝对路径:一磁盘为参照物,使用\(反斜杠)d. python中,写路径时,如果最后的对象文件在该文件夹不存在,python会自动创建一个
-
参数2 :r, a, w, +等
a. 文件编辑方式
r :只读,如果文件不存在报错。
w:只写入空白文件,文件不存在,先自动创建;如果文件存在,先清空(如果某个文件夹不存在,不会创建文件夹)
a:只追加写,文件不存在报错,文件存在,追加
+:(尽量不用)可读可写,格式:r+, a+, w+,Python操作文件,要么读要么写,不能同时读写文件展示形式(数字的映射的方式,对应成图片,还是啥)
t :文本 :rt,at,wt,(t可以省略不写) :以文本形式操作文件b :字节 ——> 除文本外的其他形式,多媒体比特,如图片
——> rb,wb,ab :表示以字节形式操作文件 -
参数3 :encoding = ‘utf-8’ (常用)
文件写操作实例
注意,文件这块很重要的思路是:把文件内数据取出来,赋值给str1,然后对str1进行处理,处理成想要的数据
f = open(‘./test/咏鹅.txt’,‘w’,encoding = ‘utf-8’)
str_1 = ‘嗯嗯嗯好好好’
f.write(str_1)
f.close() # 注意一定要最后一定要关闭文件
文件读操作实例
f = open('./test/文件1.txt','r',encoding = 'utf-8')
# 注意:如果使用多个read(),有指针存在,会接着上面读取的停留位置,接着读取
print(f.read()) #一次性读所有内容,返回的是字符串
print(f.readline()) # 一次读一行,返回的是字符串
print(f.readlines()) #一次读全部内容,但每一行内容作为列表中的一个元素
f.close()
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
Input In [1], in <cell line: 1>()
----> 1 f = open('./test/文件1.txt','r',encoding = 'utf-8')
2 # 注意:如果使用多个read(),有指针存在,会接着上面读取的停留位置,接着读取
3 print(f.read()) #一次性读所有内容,返回的是字符串
FileNotFoundError: [Errno 2] No such file or directory: './test/文件1.txt'
1.2 seek(参数1 ,参数2 ):能够将指针移动指定的偏移量
seek指定开始输出的位置,即指针的位置
-
参数1 :移动的偏移量。(默认为0)
-
参数2 :0 - 将指针移动到文件开头、1(默认是1) - 将指针移动到当前位置 、2 - 指针移动到文件尾部
f = open('界面.txt','r',encoding = 'utf-8')
#将指针再移动到文件开头
f.seek(0,0)
# 1.将一个英文符号对应一个偏移量,一个汉字对应3个偏移量
f.seek(6,0)
# 2.如果文件是“欢迎进入系统”,会输出“进入系统”,偏移6单位,从6后的单位开始输出
# 3.指针先判断在哪个位置(0,1,2),然后偏移,从此位置开始输出。
# 4.指针值,不同于索引,从1开始
# 5.换行: linux :\n,windows :\r\n, mac:\r
1.3 tell() : 查看当前指针的位置
注意:tell会将汉字视为偏移量为1,所以最后要‘ + 文字数量 * 2’
二、csv文件的操作
-
本质:是文本文件,只是以表格的形式来展示数据
-
使用内置的csv模块来进行csv文件的读写操作
import csv -
实例:
csv文件如何操作?
这里提供的是对csv文件的直接操作,pandas里提供的是对拿出的copy版的dateframe文件操作
1.打开并返回一个文件对象
f1 = open(‘./店铺信息.csv’,‘w’,encoding = ‘utf-8’)
2.创建写方法对象
mywriter = csv.writer(f1)
3.(单/多)行写入操作
col = [‘店铺名’,‘人均’,‘口味’,‘环境’,‘服务’]
mywrite.writerow(col)
多行写入:writerows()
dates = [
[‘吼堂老火锅’,126,4.5,4.7,4.6],
[‘小龙坎’,100,4.8,4.8,4.7],
[‘巴蜀大宅门’,‘70’,‘4.8’,‘4.6’,4.8]
]
#写入文件都会转化成字符串格式,所以数字写啥格式都行
mywrite.writerows(dates)
f1.close
4.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()
# 输出北京四个评分的平均分
import csv
f = open('./北京高档酒店价格分析.csv', 'r', encoding='utf-8')
dates = csv.reader(f)
date = list(dates)
f.close()
f = open('./北京酒店信息.csv', 'w', encoding='utf-8')
for i in date[1:]:
avg = round((float(i[3]) + float(i[4]) + float(i[5]) + float(i[6])) / 4, 2)
print(f'{i[0]}的平均分是{avg}')
# 0。注意,csv文件读出来的是,双重列表形式的 且文件对象,需要用构造器如list,来转换一下格式
# 1. 注意遍历出来的对象是什么,然后能用下标,就直接用下标,索引即可
# 2。构造器加上copy()出来的文件的时候,文件别关!!
# 3.读完文件要关,不能又读又写