python从入门到实践笔记(八)

本文介绍了Python中文件的基本操作方法,包括读取整个文件、逐行读取、创建列表和使用文件内容等技巧。此外,还讲解了如何处理文件读取过程中可能出现的异常情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间:2018/5/5(毕设拖更了一个月 又啥都不会了- -!)

内容:文件和异常


文件和异常


    通过文件操作使你能快速地分析大量数据;异常是Python创建的特殊对象,用于管理程序运行时出现的错误。


从文件中读取数据

读取整个文件

    在目录下创建pi_digits.txt文件,其中记录π的浮点数。尝试打开并读取这个文件并且打印显示到屏幕上。

with open('/work\pi_digits.txt') as file_object:
	contents = file_object.read()
	print(contents.rstrip())

#该文档保存在c盘work文件夹中

#关键字with在不再需要访问文件后将其关闭。也可以调用open()和close()来打开和关闭文件,但这样做时,如果程序存在bug,导致close()未执行,文件将不会关闭。函数open()返回的是一个表示形参所代表文件的对象,python将这个对象储存在我们将在后面使用的变量(file_object)中。

#我们使用方法read()读取这个文件的全部内容,并将其作为字符串储存在变量contents内。打印contents时又使用方法rstrip()去除字符串后的空行,而read()方法到达文件末尾时返回一个空字符串。

文件路径

使用以下语句在文件夹中寻找文件:

with open('text_file/filename.txt') as file_object:

可以将文件在计算机中的准确位置告诉Python,这称为绝对文件路径,在相对路径行不通时可以使用绝对路径。而绝对路径一般来说相对较长,因此将其储存在一个变量中,再将该变量传递给open()。

file_path = 'C:\User\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object:

#windows中路径使用反斜杠\, linux及os X中使用斜杠/。

!windows系统有时候能够正确地解读文件路径中的斜杠。另外,由于反斜杠在python中被视为转义标记,为在windows中确保万无一失,应以原始字符串的方式指定路径,即在开头的单引号前加上r。

逐行读取

    要以每次一行的方式检查文件,可以对文件对象使用for循环:

file_name = r'C:/work/pi_digits.txt'

with open(file_name) as file_object:
	for line in file_object:
		print(line)

打印后会出现空行,原因是因为在这个文件中,每行的末尾都有一个看不见的换行符,而print语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print语句,消除这些空白,可以在print语句中使用rstrip()方法。

file_name = r'C:/work/pi_digits.txt'

with open(file_name) as file_object:
	for line in file_object:
		print(line.rstrip())

创建一个包含文件各行内容的列表

    使用关键字with时,open()返回的文件对象只有在with代码块内可用。如果要在with代码块外访问文件的内容,可在with代码块内将文件的各行储存在一个列表里,并在with代码块外使用该列表。

file_name = r'C:\work\pi_digits.txt'

with open(file_name) as file_object:
	lines = file_object.readlines()
	
	
for line in lines:
	print(line.rstrip())

    方法readlines()从文件中读取每一行,并将其储存在一个列表中;接下来该列表被储存在变量lines中。

使用文件的内容

file_name = r'C:\work\pi_digits.txt'

with open(file_name) as file_object:
	lines = file_object.readlines()
	
	
pi_string = ' '
for line in lines:
	pi_string += line.strip()
	
	
print(pi_string)
print(len(pi_string))

    读取文本文件时,python将其中所有的文本都解读为字符串。如果读取的是数字并需要将其作为数字使用,必须使用int()或者float()进行数据类型转换。

包含一百万位的大型文件

file_name = r'C:\work\pi_million_digits.txt'

with open(file_name) as file_object:
	lines = file_object.readlines()
	
	
pi_string = ' '
for line in lines:
	pi_string += line.strip()
	
	
print(pi_string[:52] + '.....')
print(len(pi_string))

    打印前50位π的前50位,该txt文档包括小数点后100000位。

圆周率中包含你的生日吗?

file_name = r'C:\work\pi_million_digits.txt'

with open(file_name) as file_object:
	lines = file_object.readlines()
	
	
pi_string = ' '
for line in lines:
	pi_string += line.strip()
	
	
birthday = input('Enter your birthday,in the form mmddyy: ')
if birthday in pi_string:
	print('Your birthday appears in the first million digits of pi!')
else:
	print('Your birthday doesn\'t appears in the first million digits of pi!')

   

写入文件

写入空文件

filename = r'C:\work\programing.txt'


with open(filename,'w') as file_object:
	file_object.write('I love programing.')

    调用open()时提供另一个实参,告诉python你要写入打开的文件。打开文件时,可指定读取模式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r+').如果省略了模式参数,python将以默认的只读模式打开文件。

!python只能将字符串写入文件,要将数值写入文件,需要使用函数str()将其转换成字符串形式。

!如果你写入的文件不存在,函数open()将自动创建它。然而,以写入('w')模式打开文件时千万小心,因为如果指定的文件已经存在,python将在返回文件对象前清空该文件。

写入多行

    函数write()不会在你写入的文本末尾添加换行符,所以多行写入需要使用换行符。还可以使用空格制表符来调整输出格式。

filename = r'C:\work\programing.txt'


with open(filename,'w') as file_object:
	file_object.write('I love programing.\n')
	file_object.write('I love creating new games!\n')

附加到文件

    给文件添加内容而不是覆盖原有内容,可使用附加模式打开文件。

filename = r'C:\work\programing.txt'


with open(filename,'a') as file_object:
	file_object.write('I love programing.\n')
	file_object.write('I love creating new games!\n')


异常

    python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让python不知所措的错误时,他都会创建一个异常对象。如果你编写了处理该异常的代码,程序将会继续进行,如果你未对异常进行处理,程序将停止,显示traceback。

    异常时使用try-except代码块处理的,它可以使python执行指定操作,同时报告python发生异常时怎么办。即便出现异常,程序也将继续运行:显示你编写的友好的错误信息,而不是令用户迷惑的traceback。


处理ZeroDivisionError错误

    比如你用5/0:

print(5/0)

得到traceback:

Traceback (most recent call last):
  File "C:\work\new 11122.py", line 1, in <module>
    print(5/0)

ZeroDivisionError: division by zero

使用try-except代码块

try:
	print(5/0)
except ZeroDivisionError:
	print('You can\'t divide by zero!')
	

使用异常避免崩溃

print('Give me two numbers,and i\'ll divide them.')
print('Enter \'q\' to quit.')


while True:
	first_number = input('\nFirst number:')
	if first_number == 'q':
		break
	second_number = input('Second number:')
	if second_number == 'q':
		break
	answer = int(first_number) / int(second_number)
	print(answer)

      上述程序未考虑除数为0时崩溃的情况。

else代码块

    通过将可能引发错误的代码放在try-except代码块中,可以提高这个程序抵抗错误的能力。

print('Give me two numbers,and i\'ll divide them.')
print('Enter \'q\' to quit.')


while True:
	first_number = input('\nFirst number:')
	if first_number == 'q':
		break
	second_number = input('Second number:')
	if second_number == 'q':
		break
	try:
		answer = int(first_number) / int(second_number)
	except ZeroDivisionError:
		print('You can\'t divide by zero!')
	else:
		print(answer)

    try-except-else代码块工作原理如下:python尝试执行try代码块中的代码,只有可能引发异常的代码才需要放入try语句中。

处理FileNotFoundError异常


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值