Python 文件和异常

一、从文件中读取数据

1.读取整个文件

1 with open('pi_digits.txt')as file_object:
2     contents = file_object.read()
3     print(contents)

 (当前目录下已有pi_digits.txt)

函数 open() 接受一个参数,文件名称,然后在当前执行的文件所在的目录中查找指定的文件,最后返回一个文件对象。

关键字 with 在不需要访问文件后将其关闭。(也可以使用open,close,但是如果程序中断没有close则会出问题,文件不关闭可能导致数据丢失或者受损)

有了文件对象之后,可以用 read() 方法读取文件的全部内容,并将其作为一个长长的字符串存储在contents中

(read()读到文件末尾时返回一个空字符串,而将这个空字符串显示出来时是一个空行,所以上面程序执行完最后会多出一个空行,可用rstrip()删除末尾的空行 print(contents.rstrip()))

2.文件路径

如果文件不在当前目录下,则需要提供文件路径

相对文件路径:文件在当前文件夹的子文件夹中。比如在当前目录的test文件夹下:

在Linux和OS X 中,可以这样写: 1 with open('test/pi_digits.txt')as file_object: 

在Windows中,可以这样写: 1 with open('test\pi_digits.txt')as file_object: 

绝对文件路径:文件在计算机中的准确位置。一般路径较长,存储在一个变量中;

在Linux和OS X 中,可以这样写:

1 file_path = '/home/ehmatthes/other_files/text_files/filename.txt'
2 with open(file_path) as file_object:

 在Windows中,可以这样写:

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

3.逐行读取

可使用for循环 

1 filename = 'pi_digits.txt'
2 
3 with open(filename)as file_object:
4     for line in file_object:
5         print(line)

第1行将文件名存在变量中是一种常见的做法。

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

1 filename = 'pi_digits.txt'
2 
3 with open(filename)as file_object:
4     lines = file_object.readlines()
5 
6 for line in lines:
7     print(line.rstrip())

4️⃣处的 readlines() 方法从文件中读取每一行,并将其存储在一个列表中

5.使用文件的内容

 1 filename = 'pi_digits.txt'
 2 
 3 with open(filename)as file_object:
 4     lines = file_object.readlines()
 5 
 6 pi_string = ''
 7 for line in lines:
 8     pi_string += line.strip()
 9 
10 print(pi_string)
11 print(len(pi_string))

读取文本文件时,Python 将其中的所有文本都解读为字符串,若要使用数值,则用int(),float()转换

6.包含一百万位的大型文件

Python没有任何限制,只要内存足够大,下面的程序如果不加限制,有的机器可能受不了

 1 filename = 'pi_million_digits.txt'
 2 
 3 with open(filename)as file_object:
 4     lines = file_object.readlines()
 5 
 6 pi_string = ''
 7 for line in lines:
 8     pi_string += line.strip()
 9 
10 print(pi_string[:50]+'...')
11 print(len(pi_string))
12 # 结果是
13 # 3.141592653589793238462643383279502884197169399375...
14 # 1000002

二、写入文件

保存数据的最简单的方式之一是将其写入到文件中

1.写入空文件

1 filename = 'a.txt'
2 
3 with open(filename, 'w')as file_object:
4     file_object.write('I love you. ')

        open() 中有两个实参,一个是文件名称,一个是 'w',这告诉Python以写入模式打开这个文件,打开文件时,可以指定读取模式( 'r' ),写入模式( 'w' ),附加模式( 'a' ),读取和写入模式( 'r+' ),省略模式实参则是只读模式

如果要写入的文件不存在,open() 将会自动创建它;如果已经存在,则会覆盖之前的内容,这点要注意。

Python只能将字符串写入文本文件,若要存储数值,则应该使用str()将其转换后写入。

2.写入多行

函数 write() 不会在末尾添加换行符,所以要这样写: 1 file_object.write('I love you.\n') 2 file_object.write('I love you too.') 

3.附加到文件

使用附加模式,写入的行都会添加至文件末尾,如果文件不存在会创建新文件。

 1 with open(filename, 'a') as file_object: 2 file_object.write('\nFuck you! ') 

三、异常

Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。

每当发生错误时,Python都会创建一个异常对象,如果你编写了处理该异常的代码,程序将继续运行,否则程序将停止。

异常是使用 try-except 代码块 处理的,使用该代码块时,即便出现异常,程序会显示你编写的信息,然后继续运行。

1.处理 ZeroDivisionError 异常

下面创建一个除法计算器:

 1 print("Give me two numbers, and I'll divide them. ")
 2 print("Enter 'q' to quit. ")
 3 
 4 while True:
 5     first_number = input("\nFirst number: ")
 6     if first_number == 'q':
 7         break
 8     second_number = input("Second number: ")
 9     if second_number == 'q':
10         break
11     try:
12         answer = int(first_number)/int(second_number)
13     except ZeroDivisionError:
14         print("You can't divide by 0 ! ")
15     else:
16         print(answer)

 第11-16行为 try-except-else 代码块,将能引发异常的代码放在try语句中,try代码成功运行时运行else

2.失败时一声不吭

Python有一个 pass 语句,可在代码块中使用它来让 Python 什么都不要做

1     try:
2         answer = int(first_number)/int(second_number)
3     except ZeroDivisionError:
4         pass
5     else:
6         print(answer)

四、使用模块json来存储数据

JSON(JavaScript Object Notation) 格式最初是为 JavaScript 开发的,后来成为了一种常见的格式。

模块 json 让你能够将简单的Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。

1.使用 json.dump() 和 json.load()

先编写一个存储一组数字的简短程序;

1 import json
2 
3 numbers = [2, 3, 4, 5, 6, 7, 9]
4 
5 filename = 'num.json'
6 with open(filename, 'w') as f_obj:
7     json.dump(numbers, f_obj)

 在编写一个将这些数字读取到内存中的程序:

1 import json
2 
3 filename = 'num.json'
4 with open(filename) as f_obj:
5     numbers = json.load(f_obj)
6 
7 print(numbers)

 这是一种在程序之间共享数据的简单方式

重构:将代码划分为一系列完成具体工作的函数

转载于:https://www.cnblogs.com/hustle-dong/p/9489266.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值