注:本实验来源于 实验楼:python3简明教程 作者: FrostSigh

本节实验在实验楼linux环境下操作后,找了一个windows下的操作方案(《python编程:从入门到实践》)。

索引:

项目

Value

1.文件打开与关闭

open()与with open()

2.文件读取

read();readline();readlines()

3.文件写入

write()方法及 open()参数

4.几个例子

拷贝文件:enumerate()方法

*

文本文件相关信息统计:count()方法

5.大文件读取

一个例子:注意事项

6.挑战

检取一个文件中的数字

1.文件打开与关闭

我们使用open函数打开文件。它需要两个参数,第一个参数是文件名或文件路径;第二个是文件的打开模式。

  • ‘r’:默认模式,以只读打开。
  • ’w’:写入模式,如果文件存在将会删除里面所有内容,然后重新写入;如果不存在就新创建。
  • ‘a’:追加模式:写入到文件中的内容自动添加到末尾。

注:用open打开文件时,一定要在使用完之后关闭文件。

推荐用with open;这样python会自动帮我们关闭文件。

python3.10教程 python3 简明教程_git

2.文件读取

有三种方法可以读取文件内容:

  • read()
    一次性读取整个文件,如果再次调用,会返回空字符串(因为它已经读取完了整个文件)。
  • python3.10教程 python3 简明教程_文本文件_02

    python3.10教程 python3 简明教程_git_03

  • 以后都会用with open来打开文件。
    read()方法到达文件末尾时会返回一个空字符串,这个空字符串显示出来就是一个空行;可用print中的rstrip()删除。
  • readline()
    每次读取文件的一行。
  • python3.10教程 python3 简明教程_git_04

  • readlines()
    将读取所有行到一个列表中。
    使用关键字with时,open返回的文件对象只在with代码块内可用。如果要在with代码块外访问文件的内容,可在with内将文件的各行存储为一个列表。
  • python3.10教程 python3 简明教程_打开文件_05

  • 使用文件内容 :将文件内容读取到内存后就可以使用它了。
filename = 'pi_digits.txt'

with open(filename) as fobj:
	lines = fobj.readlines()

pi_string = ''
for line in lines:
	pi_string += line.rstrip()

print(pi_string)
print(len(pi_string))

python3.10教程 python3 简明教程_python3.10教程_06

3.文件写入

写入空文件:为open()提供另一个实参’w’;将模式改为写入。我们将一条信息存储到文件中:

  • write()方法
filename = 'sample.txt'

with open(filename, 'w') as fobj:
	fobj.write("I love python! and I am comming!")

程序执行后,就在此文件夹内创建了这一个txt文件。

  • 附加到文件
    如果要给文件添加内容,而不是覆盖原有内容,可以附加模式 打开文件,将写入的文件添加到文件的末尾。
filename = 'sample.txt'

with open(filename, 'a') as fobj:
	fobj.write("\nI also love C language.\n")
	fobj.write("Becasue the test will use.\n")

python3.10教程 python3 简明教程_git_07

4.几个例子

  • 拷贝文件
    拷贝给定的文件到另一个给定的文本文件。
f_ile = 'sample.txt'
Copy_file = 'Copy_sample.txt'

with open(f_ile) as fobj:
	lines = fobj.readlines()

with open(Copy_file, 'w') as cfobj:
	for line in lines:
		cfobj.write(line)

查看文件,写入成功。

python3.10教程 python3 简明教程_git_08


一个函数: enumerate(iterableobject)

序列中循环时,索引位置和对应值可以使用它同时得到

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

python3.10教程 python3 简明教程_python3.10教程_09

  • 文本文件相关信息统计
    编写一个文件,对任意给定文本文件中的指表符、行、空格进行计数。
import os

def parse_file(path):
	"""
	分析指定文本文件;返回其空格、制表符、行 的数目
	
	:arg path:文件的路径
	:return:包含空格数、制表符数、行数的元组
	"""
	with open(path) as fobj:
		#分别是存储行数、制表符数、空格数的变量
		i = 0
		spaces = 0
		tabs = 0
	for i, line in enumerate(fobj):
		#字符串内建函数count(str, beg= 0,end=len(string))

		#返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定	
		#则返回指定范围内 str 出现的次数
		spaces += line.count(' ')
		tabs += line.count('\t')

	return spaces, tabs, i+1

def main(path):
	"""
	主函数用于打开文件分析结果
	
	:argv path:文件的路径
	:return:若文件存在则为True, 否则False
	"""
	if os.path.exists(path):
		spaces, tabs, lines = parse_file(path)
		print("space {}. tabs {}. lines {}".format(spaces, tabs, lines))
		return True
	else:
		return False


if __name__ == '__main__':
	path = 'Copy_sample.txt'
	main(path)

python3.10教程 python3 简明教程_python3简明教程_10


python3.10教程 python3 简明教程_打开文件_11

:程序有两个函数,main()和parse_file(),parse_file()函数真正分析文件并返回结果,然后在main()函数里打印结果。通过分割代码到一些更小的单元(函数)里,能帮助我们组织代码库且也更容易为函数编写测试用例。

5.大文件读取

有些文件会过大,不能用read()方法一次性读取,会造成错误;
需要一行一行的读~!

例:读取linux的cpu信息

filepath = 'proc/cpuinfo'

with open(filepath) as fobj:
	lines = fobj.readlines()
	
for line in lines:
	print(lines.rstrip())

6.挑战

实现一个程序用来提取文件中的字符串中的数字,然后打印输出。

filepath = "sample.txt"

with open(filepath) as fobj:
	lines = fobj.readlines()

digits = ""
for line in lines:
	for char in line:
		if char.isdigit():
			digits += char
print(digits)

sample.txt:

python3.10教程 python3 简明教程_文本文件_12

结果:

python3.10教程 python3 简明教程_python3简明教程_13