【python编程从入门到到实践】第十章 文件和异常

一、读取文件

pi_digits.txt

3.1415926535
  8979323846
  2643383279

1.读取文件的全部内容

# file_reader.py

from pathlib import Path

path = Path("pi_digits.txt")
contents = path.read_text()
print(contents)

在这里插入图片描述

2.相对文件路径和绝对文件路径

  • 当相对路径行不通时,可以使用绝对路径

3.访问文件中的各行

# file_reader.py

from pathlib import Path

path = Path("pi_digits.txt")
contents = path.read_text()

lines = contents.splitlines() ##
for line in lines:
    print(line)

4.使用文件的内容

  • 注意⚠️:在读取文本文件时,所有的文本都将解释为字符串。如果需要其作为数值使用,则需要用int()转,或float()转。
# file_reader.py

from pathlib import Path

path = Path("pi_digits.txt")
contents = path.read_text()

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

print(pi_string)
print(len(pi_string))

将每行左端的空格也加入了字符串
此时,将每行左端的空格也加入了字符串。如果要去除,如下

# file_reader.py

from pathlib import Path

path = Path("pi_digits.txt")
contents = path.read_text()

lines = contents.splitlines()
pi_string = ''
for line in lines:
    pi_string += line.lstrip() # 使用lstrip函数去除左端的空格

print(pi_string)
print(len(pi_string))

在这里插入图片描述

5.包含 100 万位的大型文件

# file_reader.py

from pathlib import Path

path = Path("pi_million_digits.txt") # π小数点后一百万位的txt
contents = path.read_text()

lines = contents.splitlines()
pi_string = ''
for line in lines:
    pi_string += line.lstrip()

print(f"{pi_string[:50]}...")
print(len(pi_string))

在这里插入图片描述

6.圆周率中包含你的生日吗

from pathlib import Path

path = Path("pi_million_digits.txt")
contents = path.read_text()

lines = contents.splitlines()
pi_string = ''
for line in lines:
    pi_string += line.lstrip()

birthday = input('Enter your birthday, in the form mmddyy: ')
if birthday in pi_string:
    print('Yes')
else:
    print('No')

在这里插入图片描述

二、写入文件

  • 使用write_text()`写入文件时,要确保文件没有创建,或者创建了但是没有内容,如果有内容,将会直接改写文件的内容。

1.写入一行

# write_message.py

from pathlib import Path

path = Path('programming.txt')
path.write_text('I love programming.')

运行后创建内容为 I love programming. programming.txt的文件。

  • 只能将字符串写入文本文件,如果要写入数值,需要转为字符串。

2.写入多行

from pathlib import Path

contents = 'I love programming.'
contents += '\nI also like creating a game.' #

path = Path('programming.txt')
path.write_text(contents)

运行后创建内容为
I love programming.
I also like creating a game.
programming.txt的文件。

三、异常

1.处理 ZeroDivisionError 异常

print(5/0)

在这里插入图片描述

2.使用 try-except 代码块 ⭐️

  • except 会顺序依次检测,如果将所有错误检测完,则后续的except 将不会再执行。
try:
    print(5/0)
except ZeroDivisionError:
    print('You cant divide by zero.') # 产生除零错误时运行
except:
	print('发生了未知错误')            # 产生其他错误时运行
else:
	print('')						 # 没有错误时运行
finallyprint('')						 # 无论如何都会运行

在这里插入图片描述

3.使用异常避免崩溃

while True:
    first_number = input('first number: ')
    second_number = input('second number: ')

    try:
        answer = int(first_number) / int(second_number)
    except:
        print('You cant divide by zero.')
    else:
        print(answer)

在这里插入图片描述

四、存储数据(后续需要再补充)

1.使用 json.dumps() 和 json.loads()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值