IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python基础教程(第2版)第十一章 文件和素材 -> 正文阅读

[Python知识库]Python基础教程(第2版)第十一章 文件和素材

1.打开文件

open函数:打开文件,返回一个文件对象

????????open(name[. mode[, buffering]])

????????name:使用一个文件名作为唯一的强制参数

????????????????只带一个参数时,获得的是能读取文件内容的文件对象

f=open(r'C:\text\somefile.txt')

????????mode(可选参数):模式

????????????????明确地指定读模式和什么模式参数都不用的效果是一样的

????????????????使用写模式可以向文件写人内容

????????????????“b'模式改变处理文件的方法。一般来说,Python假定处理的是文本文件,但如果处理的是一些其他类型的文件(二进制文件),比如声音剪辑或者图像,那么应该在模式参数中增加'b',如:参数rb’可以用来读取一个二进制文件

????????????????“+”参数可以用到其他任何模式中,指明读和写都是允许的,如:'r+’能在打开一个文本文件用来读写时使用

????????buffering(可选参数):控制着文件的缓冲

? ? ? ? ? ? ? ? 如果参数是0或False,I/O就是无缓冲的,即所有的读写操作都直接针对硬盘

????????????????如果参数是1或True,I/O就是有缓冲的,即Python使用内存来代替硬盘,让程序更快,此时只有使用flush或 者close时才会更新硬盘上的数据

????????????????大于1的数字代表缓冲区的大小(单位是字节)

? ? ? ? ? ? ? ? 负数代表使用默认的缓冲区大小

2.基本文件方法

类文件对象(流):支持一些文件方法的对象

2.1 读和写

文件(或流)最重要的能力是提供或者接受数据

如果有一个名为f的类文件对象,那么就可以用f.write方法和f.read方法(以字符串形式)来写入和读取数据

每次调用f.write(string)时,所提供的参数string会被追加到文件中已存在部分的后面

f=open("somefile.txt",'w')
f.write("Hello,")
f.write("World!")
f.close()	#完成对文件的操作时调用close

调用f.read时,要告诉流读多少字符(字节)

f=open("somefile.txt")
f.read(4)

2.2 管式输出

在UNIX的shell,使用管道可以在一个命令后面续写其他的多个命令

$ cat somefile.txt | python somescript.py | sort

????????cat somefile.txt:把somefile.txt的内容写到标准输出 (sys.stdout)?

????????python somescript.py:运行Python脚本somescript,脚本应该是从标准输入读,把结果写入到标准输出

????????sort:从标准输入(sys.stdin)读取所有的文本,按字母排序,然后把结果写入标准输出

? ? ? ?管道符号 |:将一个命令的标准输出和下一个命令的标准输入连在一起

somescript.py会从它的sys.stdin中读取数据 (catsomefile.txt写入的),并把结果写入它的sys.stdout (sort在此得到数据)中

#someile.txt
Your mother was a hamster and your
father smelled of elderberries.
#somescript. py
import sys
text=sys.stdin.read()
words=text.split()
wordcount=len(words)
print("Wordcount:",wordcount)	#Wordcount: 11

随机访问:使用类文件对象seek和teel来直接访问感兴趣的部分

seek (offset[.whence]):把当前位置(进行读和写的位置)移动到由offest定义的位置

????????whence默认是0(offest必须非负),也就是说偏移量是从文件开头开始计算的,whence也可能被设置为1(相对于当前位置的移动)或者2(相对于文件结尾的移动)

f=open(r'C:\text\somefile.txt','w')
f.write('01234567890123456789')
f.seek(5)	#位置移动到5
f.write('Hello, World!')
f.close()
f=open(r'C:\text\somefile.txt')
f.read()	#01234Hello, World!89

tell:返回当前文件的位置

f=open(r'C:\text\somefile.txt')
f.read(3)	#012
f.read(2)	#34
f.tell()	#5

2.3 读写行

file.readline:读取单独的一行(从当前的位置开始直到换行符出现,也读取这个换行符)

????????使用一个非负的整数作为readline的参数可以读取的字符(或字节)的最大值

readlines:读取一个文件中的所有行并将其作为列表返回

writelines:把所有的字符串写入文件(或流)

2.4 关闭文件

使用close方法关闭文件

虽然通常来说一个文件对象在退出程序后(也可能在退出前)会自动关闭,但是为了安全起见,要在使用完成后关闭文件

????????因为Python可能会缓存(出于效率的考虑而把数据临时地存储在某处)写入的数据,如果程序因为某些原因崩溃了,那么数据根本就不会被写入文件

? ? ? ? 还可以避免在某些操作系统或设置中进行无用的修改,或者用完系统中打开文件的配额

如果想确保文件被关闭,可以使用try/finally语句,并且在finally子句中调用close方法

# Open your file here
try:
	# Write data to your file
finally:
	file.close()

Python2.5后有专门为这种情况设计的语句,即with语句? ?

????????with语句可以打开文件并且将其赋值到变量上,之后就可以将数据写入语句体中的文件(或执行其他操作),文件在语句结束后会被自动关闭,即使是由于异常引起的结束也是如此

with open("somefile. txt") as somefile:
	do_ something(somefile)

对文件中的数据进行修改时,并不是立刻就会被体现,因为数据可能被缓存了(在内存中临时性地存储),直到关闭文件才会被写入到文件

如果需要继续使用文件(不关闭文件),又想将磁盘上的文件进行更新以反映对文件的修改,那么就要调用文件对象的flush方法

2.5 使用基本文件方法

#somefile.txt
Welcome to this file
There is nothing here except
This stupid haiku

#read(n)
f=open(r'C:\text\somefile.txt')
f.read(7)	#Welcome
f.read(4)	# to 
f.close()

#read
f=open(r'C:\text\somefile.txt')
print(f.read())		#Welcome to this file
# 					There is nothing here except
# 					This stupid haiku
f.close()

#readline()
f=open(r'C:\text\somefile.txt')
for i in range(3):
	print(str(i)+':'+f.readline())	#O: Welcome to this file
#									1: There is nothing here except
#									2: This stupid haiku
f.close()

#readlines()
import pprint
pprint.pprint(open(r'C:\text\somefile.txt').readlines())	#['Welcome to this file\n'
#															'There is nothing here except\n'
#															'This stupid haiku']

#write(string)
f=open(r'C:\text\somefile.txt')
f.write('this\nis no\nhaiku')
f.close()
#修改后的somefile.txt
# this
# is no
# haiku

#writelines(list)
f=open(r'C:\text\somefile.txt')
lines=f.readlines()
f.close()
lines[1]="isn't a\n"
f=open(r'C:\text\somefile.txt','w')
f.writelines(lines)
f.close()
#修改后的somefile.txt
# this
# isn't a
# haiku

3.对文件内容进行迭代

对文件内容进行迭代以及重复执行一些操作,是最常见的文件操作之一

虚拟函数process:表示每个字符或每行的处理过程

def process(string):
	print("Processing:"+string)

3.1 按字节处理

最常见的对文件内容进行迭代的方法是在wile循环中使用read方法

f=open(filename)
while True:
	char=f.read(1)
	if not char:
		break
	process(char)
f.close()

3.2 按行操作

当处理文本文件时 ,经常会对文件的行进行迭代而不是处理单个字符

f=open(filename)
while True:
	line=f.readline()
	if not line:
		break
	process(line)
f.close()

3.3 读取所有内容

如果文件不是很大,可以使用不带参数的read方法一次读取整个文件(把整个文件当作一个字符串来读取)

f=open(filename)
for char in f.read():
	process(char)
f.close()

或者使用readlines方法(把文件读入一个字符串列表,在列表中每个字符串就是一行)

f=open(filename)
for line in f.readlines():
	process(line)
f.close()

3.4 使用fileinput实现懒惰行迭代

懒惰行迭代:只读取实际需要的文件部分

import fileinput
for line in fileinput.input(filename):
	process(line)

3.5 文件迭代器

从Python2.2开始,文件对象是可迭代的,可以对文件迭代器执行和普通迭代器相同的操作

for line in open(filename):
	process(line)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 11:52:10  更:2022-01-28 11:52:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:21:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码