python文件,栈,队列

文件

文件的处理包括读文件和写文件,读写文件就是请求操作系统打开个文件对象,然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数
据写入这个文件对象(写文件)

文件读取

文件读取可分为以下步骤:
打开文件
读取文件内容
关闭文件
打开文件要使用open内建函数:
open(file [, mode=‘r’, encoding=None, errors=None])
参数说明: file:文件路径,可以是相对路径和绝对路径
mode:文件打开模式
encodeing: 文件编码方式,不用于二进制文件,一般是utf-8,gbk
errors:指定如何处理编码和解码错误 ,适用于文本文件
返回值:一个可迭代的文件对象

mode解释
r只读
w只写,写之前会清空文件的内容,如果文件不存在,会创建新文件
a追加的方式,在原本内容中继续写,如果文件不存在,则会创建新文件
r+可读可写
w+打开一个文件用于读写,如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
a+打开一个文件用于读写,如果该文件已存在,文件指针将会放在文件的结尾,文件打开时会是追加模式,如果该文件不存在,文件新文件用于读写。
brb,wb,ab,rb+,wb+,ab+意义和上面一样,用于二进制文件操作

注意:二进制文件一般用于视频,音频,图片
读取文件常用函数:

函数解释
read([size])读取文件(读取size字符,默认读取全部)
readline([size])读取一行,如果指定size,将读入指定的字符数
readlines()把文件内容按行全部读入,返回一个包含所有行的列表

打开文件

fp = open("source/1.txt",'w',encoding='utf-8')

写文件
write 只能往文件里写字符串

fp.write("曾国藩")

读取文件全部内容

content = fp.read()
print(content)

读取指定字符数,包括行尾的换行符\n

print(fp.read(20))

读取一行

print(fp.readline(5)) #读取指定字符数
print(fp.readline()) #读取一整行,直到碰到一个\n

读取所有行,返回列表

print(fp.readlines())

关闭文件

fp.close()

#由于文件读写时都有可能产生IOError,一旦出错,后 面的f.close()就不会调用。
所以,为了保证无论是否出错都能正确地关闭⽂件,我们可以使用try …

#finally来实现:
	try:
		fp = open('qfile.txt','r',encoding='utf-8')
		print(fp.readlines())
finally:
		fp.close()
#可以简写为:
#with语句会自动调用close方法关闭文件
with open('qfile.txt','r',encoding='utf-8') as fp:
		print(fp.readline())

fread()和freadlines()会一次读入文件全部内容,如果文件太大,会直接耗尽内存的,因为文件对象可迭代,所以可以用for循环遍历文件读取

with open('qfile.txt','r',encoding='utf-8') as fp:
for line in fp:
print(line.strip())
#注意无论是read、readline、readlines都会入行末的\n,所以需要手动剔除\n

写文件

打开文件

path = "file11.txt"
f = open(path,"w",encoding="utf-8")

.写入内容,将内容写入到缓冲区

#不会自动换行,需要换行的话,需要在字符串末尾添加换行符
f.write("Whatever is worth doing is worth doing well该行很骄傲很关键\n")

刷新缓冲区【加速数据的流动,保证缓冲区的流畅】

f.flush()

关闭文件 ,关闭文件也会刷新缓冲区

f.close()

移动文件指针

文件是顺序向后读写的,如果想要移动文件指针,可以使用seek方法:

file_obj.seek(offset,whence=0)

功能:移动文件指针
参数:offset 是偏移量,正数表示从文件开头向文件末尾移动,负数相反。
whence : 文件指针的位置,可选参数,值可以是
SEEK_SET or 0 表示文件开头位置,是默认值
SEEK_CUR or 1 表示当前位置(不能使用)
SEEK_END or 2 文件末尾位置(不能使用)
返回值:无

#1.txt内容:hello world
with open('1.txt','r',encoding='utf-8') as fp:
fp.seek(5) #移动到hello后的空格位置
print(fp.read(3)) #wo
fp.seek(0) #移动到开头
print(fp.read(5)) #hello
print(fp.tell()) #tell()显示当前指针位置
# seek(offset) # offset从文件开头向文件末尾的偏移量(字节),必须大于等于0
with open("source/3.txt",encoding='utf-8') as fp:
    print(fp.read())
    # 移动文件指针回开头,偏移3个字节
    fp.seek(3)
    print(fp.read())
    print(fp.tell())  # tell告诉当前指针位置

csv文件

逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录。每个记录由一个或多个字
段组成,用逗号分隔。使用逗号作为字段分隔符是此文件格式的名称的来源,因为
分隔字符也可以不是逗号,有时也称为字符分隔值。

在Windows下,csv文件可以通过记事本,excel,notepad++,editplus等打开

作用:CSV广泛用于不同体系结构的应用程序之间交换数据表格信息,解决不
兼容数据格式的互通问题。

需要导入csv模块

读取csv

import csv
with open(r'csv\winequality-red.csv') as fp: #1.打开⽂件
#delimiter指定分隔符
	csv_reader = csv.reader(fp,delimiter=';') #2.获取csv读取器
	header = next(csv_reader) #获取第一行的标题
	print(header)
	for line in csv_reader: #3.遍历所有的行
		print(line)

写入csv

import csv
l1 = [[1,2,3],[4,5,6],[7,8,9]]
#打开文件时,要添加newline=''参数,否则会多一个空行
with open('1.csv','w',newline='') as fp: #1.打开文件
	#delimiter='\t'指定数据分隔符
	csv_writer = csv.writer(fp,delimiter='\t') #2.获取writer
	for line in l1:
	csv_writer.writerow(line) #3.写入文件

栈和队列

抽象成一个开口向上的容器【羽毛球球筒】
在列表一端进行操作(添加、删除)。1,2,3,4,5
特点:先进后出、后进先出
创建一个栈【列表】

my_stack = []

入栈【向栈中存数据】:append

my_stack.append(23)
print(my_stack)
my_stack.append(30)
print(my_stack)
my_stack.append(4)
print(my_stack

出栈【从栈中取数据】:pop
#pop每调用一次,则取出一个数据,先添加进去的最后被取出来【先进后出】

my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)
my_stack.pop()
print(my_stack)

获取栈顶元素

print(my_stack[-1])

判栈空
print(len(my_stack) <=0)

队列

queue抽象成一个水平放置的水管
特点:先进先出

创建队列

import collections
queue = collections.deque([12,43,8,10])
print(queue)

入队【存数据】,append

queue.append(66)
print(queue)
queue.append(77)
print(queue)
#deque([12, 43, 8, 10, 66, 77])

出队【取数据】,popleft

queue.popleft()
print(queue)
queue.popleft()
print(queue)
queue.popleft()
print(queue)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值