Python3文件和流

打开文件

  • 语法:
f = open('文件名', '读写模式')
  • 文件的读写模式:
文件模式 描述
'r' 只读(默认)
'w' 只写
'a' 追加
'b' 二进制模式
'r+' 文件可读写,如果文件不存在,则创建新文件;如果文件存在,则从当前位置写入新内容,通过seek函数可以改变当前位置
'w+' 文件可读写,如果文件不存在,则创建新文件;如果文件存在,则清空文件并写入新内容
'a+' 文件可读写,如果文件不存在,则创建新文件;如果文件存在,会将写入的内容添加到原文件的最后

操作文件的基本方法

读文件和写文件

  • write(string):向文件写入内容,该方法返回写入文件的字节数
  • read([n]):读取文件,n 表示从文件指针位置开始读取n字节;如果不指定则读取所有
  • seek(n):重新设置文件指针,seek(0)为文件开始位置
  • close():关闭文件
f = open('text.txt','a+')
f.write('I love Python')
f.close()

f = open('text.txt','r')
print(f.read())
f.close()

管道输出(Linux系统)

本例要执行的命令有如下三个:

  • ls -al ~:列出home目录下的所有文件和目录
  • python filter.py:从管道接收数据,并过滤出包含readme的文件和目录。filter.py是本例要编写的程序
  • sort:对过滤结果进行排序
import sys, os, re

# 从标准输入读取全部数据
text = sys.stdin.read()
# 将字符串形式的文件和目录按行拆分,并保存到列表中
files = text.split(os.linesep)
for file in files:
	# 匹配文件名和目录名
	result = re.match('.*readme.*', file)
	if result != None:
		print(file)

现在切换到Linux终端,进入 filter.py 文件所在目录,执行如下命令:

ls -al ~ | python filter.py | sort

读行和写行

  • readline():用于从文件指针位置读取一整行文本
  • readlines():从文件指针位置读取后面所有数据,按行分隔放入列表中
  • writelines():该方法需要通过参数指定一个字符串类型的列表,将列表中每一个元素作为单独一行写入文件
f = open('urls.txt', 'a+')
urlList = ['http://geekori.com' + os.linesep, 'https://www.google.com' + os.linesep]
f.writelins(urlList)
f.close()

使用FileInput对象读取文件

针对于大文件,FileInput对象使用缓存机制,并不会一次性读取文件的所有内容,会节省内存资源。

import fileinput
fileobj = fileinput.input('urls.txt')
print(type(fileobj))
for line in fileobj:
	line = line.rstrip()
	if line != '':
		# 输入当前行号和内容
		print(fileobj.lineno(),":",line)
	else:
		# 输出当前正在操作的文件名
		print(fileobj.filename()) # 必须在第1行读取后再调用,否则返回None

转载于:https://my.oschina.net/zerobit/blog/3079292

你可能感兴趣的:(Python3文件和流)