python写入txt出现了省略_学习python写入文件 & 完善异常处理

首先我们将上一节中的文件再次拿来使用。

新建文本文件atext.txt:

JACK: Don't do it!

ROSE: Stay back! Don't come any closer!

JACK: Come on! Just give me your hand and I'll pull you back over.

ROSE: No, stay where you are! I mean it! I'll let go!

JACK: No, you won't!

ROSE: What do you mean, No I won't? Don't presume to tell me what I will and will not do.

ROSE: You don't know me.

JACK: Well, you would have done it already.

ROSE: You're distracting me. Go away !

JACK: I can't. I'm involved now. You let go, and I'm gonna have to jump in there after you.

(Jack starts taking off his shoes. )

ROSE: Don't be absurd. You'd be killed.

JACK: I'm a good swimmer.

ROSE: The fall alone would kill you.

我们的目标如下:

创建两个文件,并将JACK和ROSE的对话分别存到两个文件中。

首先我们来完成原来文件的读写:

importos

#新建两个空列表,分别作为对话的存储列表。jack_list = []

rose_list = []

try:

spoken_data = open('atext.txt')

foreach_line inspoken_data:

try:

(role,line_spoken) = each_line.split(':',1)

line_spoken = line_spoken.strip() #去除不必要的空格 ifrole == 'JACK':

jack_list.append(line_spoken) #将对应回话添加到jack的列表中 elifrole =='ROSE':

rose_list.append(line_spoken)

exceptValueError:

pass spoken_data.close() #读取文件完毕,关闭该文件。exceptIOError:

print("The Spoken_data file is missing!")

下一步将获得的两个列表jack_list和rose_list 分别写入不同的文件中:

try:

file_jack = open('file_jack.txt','w')

file_rose = open('file_rose.txt','w')

#使用print 写入到文件当中 print(jack_list,file=file_jack)

print(rose_list,file=file_rose)

#写入文件之后,我们需要关闭对应的文件 file_jack.close()

file_rose.close()

exceptIOError:

print('File IO error!')#文件读取错误,给以提示。

OK,现在执行一下,分别产生了两个文件file_jack.txt和file_rose.txt.

重新查看一下文件,如果在写入状态时程序出现了问题,那么file.close()可能无法执行,文件一直处于开启状态,无法关闭。为解决这个问题,可以用finally来扩展try,进一步进行调试。修改如下:

try:

file_jack = open('file_jack.txt','w')

file_rose = open('file_rose.txt','w')

#使用print 写入到文件当中 print(jack_list,file=file_jack)

print(rose_list,file=file_rose)

exceptIOError:

print('File IO error!')#文件读取错误,给以提示。finally:

#写入文件之后,我们需要关闭对应的文件 file_jack.close()

file_rose.close()

在Python运行出现错误时,并不是我们所写的只显示个错误信息就行了,其实Python会产生一个特定类型的异常,它会作为一个参数传入except代码组。

下面举个栗子:

#这里读取一个不存在的文件,查看Python异常机制会抛出哪些异常信息try:

info_data = open ('missing.txt')

print(info_data.readline(),end='')

exceptIOError:

print('File error')

finally:

data.close()

这个missing.txt是不存在的。因此系统会抛出异常:

File error

Traceback (most recent call last):

File "F:/PythonTea/4_10test.py", line 8, in

data.close()

NameError: name 'info_data' is not defined

因为文件info_data不存在,因此在调用其close()方法时可能会出现错误。如何解决呢?

那就在finally后面判断一下文件是否存在:

try:

info_data = open ('missing.txt')

print(info_data.readline(),end='')

exceptIOError:

print('File error')

finally:

if 'info_data' inlocals():

info_data.close()

那么结果正如预想那样仅仅出现file error ,我们自定义的错误信息。

locals()函数是在当前程序中所有定义的所有名的集合,显然info_data没有被定义成功,因此不符合条件,因此不执行下面的关闭close()操作。

在这里一直没有出现我们所需要的出现的系统抛出的异常信息。如何进行调用继续看如下代码:

try:

info_data = open ('missing.txt')

print(info_data.readline(),end='')

exceptIOError aserr:

print('File error'+ str(err))

finally:

if 'info_data' inlocals():

info_data.close()

str(err)是将错误类型定义为print可以打印的字符型,以便print()进行合法打印。

进一步,Python为简化该过程,使用with替代finally,使程序变的更简洁:

#使用with简化写法:try:

withopen ('missing.txt',) asinfo_data :

print("It's...",file=info_data)

exceptIOError aserr:

print('File error'+ str(err))

错误信息:

File error[Errno 2] No such file or directory: 'missing.txt'

重写一下整个程序如下:

importos

#新建两个空列表,分别作为对话的存储列表。jack_list = []

rose_list = []

try:

withopen('text.txt') asspoken_data:

foreach_line inspoken_data:

try:

(role,line_spoken) = each_line.split(':',1)

line_spoken = line_spoken.strip() #去除不必要的空格 ifrole == 'JACK':

jack_list.append(line_spoken) #将对应回话添加到jack的列表中 elifrole =='ROSE':

rose_list.append(line_spoken)

exceptValueError:

pass spoken_data.close() #读取文件完毕,关闭该文件。exceptIOError aserr:

print("The Spoken_data file is missing:"+ str(err))

try:

#使用print 写入到文件当中 withopen('file_jack.txt','w') asfile_jack:

print(jack_list, file=file_jack)

withopen('file_rose.txt','w') asfile_rose:

print(rose_list, file=file_rose)

exceptIOError aserr:

print('File IO error!'+ str(err))#文件读取错误,给以提示。finally:

#写入文件之后,我们需要关闭对应的文件 file_jack.close()

file_rose.close()

或者合并后面的两个with:

withopen('file_jack.txt','w') asfile_jack ,open('file_rose.txt','w') asfile_rose:

print(jack_list, file=file_jack)

print(rose_list, file=file_rose)

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页