上一篇我们介绍了 Python 的输入(input
)和输出(print
),以及如何通过命令行给程序传入参数。这篇文章就讲讲 Python 怎么读取我们的文件(比如 txt, excel 等),当然现在我们只用 Python 自带的模块和方法来介绍,后期我们还会讲一个数据处理经常用来操作表格的第三方库(pandas
)。
通过内置函数 open()
可创建或打开文件对象;
open(file, mode='r', buffering=-1, encoding=None)
open()
函数时,可以指定打开文件的模式 mode 为:‘r’(只读)、‘w’(写入,写入前删除旧内容)、‘x’(创建新文件,如果文件存在,则导致FileExistsError)、‘a’(追加)、‘b’(二进制文件)、‘t’(文本文件,默认值)、‘+’(更新,读写)try: # 这部分一定会执行的
f = open("test.txt", mode='r')
except: # 如果出现异常就会执行这段代码,否则跳过这段代码
print(f'文件读取异常,未正确打开文件!')
finally: # 最终不管是否有异常,都会执行这段代码,确保关闭打开的文件
f.close()
通过文件对象的实例方法 write/writelines
,可以写入字符串到文本文件;
通过文件对象的实例方法 read/readline
,可以读取文本文件的内容;
文件读写完成后,应该使用 close
方法关闭文件。
例子1:读取当前代码文件。
编写代码,代码如下,文件名为:CSDN.py
,这里不再用异常处理。
下面的代码像 while
, if
看不懂可以跳过,这些会在下一篇文章介绍(之前忘了写这章的内容了…),所以只要看 open
, close
, readline
就可以了。
# !/usr/bin/env python3
# _*_ coding: utf-8 _*_
# @author:森林
# @time:2023/11/22 13:04
import sys
filename = sys.argv[0] # 所读取并输出的就是本程序文件CSDN.py
f = open(filename, 'r', encoding='utf-8') # 打开文件
line_no = 0 # 统计行号
while True:
line_no += 1 # 行号计数
line = f.readline() # 读取行信息
if line:
print(line_no, ":", line, end='') # 输出行号和该行内容
else:
break
f.close() # 关闭打开的文件
输出(在终端 terminal
输入 python CSDN.py
):
D:\MyCode\Python_Code\PyCharm>python CSDN.py
1 : # !/usr/bin/env python3
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0] # 所读取并输出的就是本程序文件CSDN.py
9 : f = open(filename, 'r', encoding='utf-8') # 打开文件
10 : line_no = 0 # 统计行号
11 : while True:
12 : line_no += 1 # 行号计数
13 : line = f.readline() # 读取行信息
14 : if line:
15 : print(line_no, ":", line, end='') # 输出行号和该行内容
16 : else:
17 : break
18 : f.close() # 关闭打开的文件
要是每次写 .close()
可能你会很烦,或者有时候忘记写了,这就麻烦大了,因此 Python 也提供了另外一种安全打开文件的方式(with
语句——能确保打开的文件自动关闭)!
语法:with open(file, mode) as f:
# !/usr/bin/env python3
# _*_ coding: utf-8 _*_
# @author:森林
# @time:2023/11/22 13:04
import sys
filename = sys.argv[0] # 所读取并输出的就是本程序文件CSDN.py
line_no = 0 # 统计行号
with open(filename, 'r', encoding='utf-8') as f: # 使用with语句实现上下文管理协议
for line in f:
line_no += 1 # 行号计数
print(line_no, ":", line, end='') # 输出行号和该行内容
输出(在终端 terminal
输入 python CSDN.py
):
D:\MyCode\Python_Code\PyCharm>python CSDN.py
1 : # !/usr/bin/env python3
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0] # 所读取并输出的就是本程序文件CSDN.py
9 : line_no = 0 # 统计行号
10 : with open(filename, 'r', encoding='utf-8') as f: # 使用with语句实现上下文管理协议
11 : for line in f:
12 : line_no += 1 # 行号计数
13 : print(line_no, ":", line, end='') # 输出行号和该行内容
在 Python 中还有标准输入、输出、错误流、重定向、管道,但是基本上没怎么用过,所以这里就不进行介绍了。
格式:python 程序名字.py 参数1 参数1 ... 参数n | more
D:\MyCode\Python_Code\PyCharm>python CSDN.py | more
1 : # !/usr/bin/env python3
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0] # 所读取并输出的就是本程序文件CSDN.py
9 : line_no = 0 # 统计行号
10 : with open(filename, 'r', encoding='utf-8') as f: # 使用with语句实现上下文管理协议
11 : for line in f:
-- More --
每按一次 enter
都会多显示一行,显示完全部内容就会终止程序!
格式:python 程序名字.py 参数1 参数1 ... 参数n | sort
D:\MyCode\Python_Code\PyCharm>python CSDN.py | sort
1 : # !/usr/bin/env python3
10 : with open(filename, 'r', encoding='utf-8') as f: # 使用with语句实现上下文管理协议
11 : for line in f:
12 : line_no += 1 # 行号计数
13 : print(line_no, ":", line, end='') # 输出行号和该行内容
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
8 : filename = sys.argv[0] # 所读取并输出的就是本程序文件CSDN.py
9 : line_no = 0 # 统计行号
它会按照你输出的内容先进行排序再输出,比如这里是先按照第一位进行排序,所以先输出1开头的行,如果第一位相同,就看第二位,依次类推…
D:\MyCode\Python_Code\PyCharm>python CSDN.py | sort | more
1 : # !/usr/bin/env python3
10 : with open(filename, 'r', encoding='utf-8') as f: # 使用with语句实现上下文管理协议
11 : for line in f:
12 : line_no += 1 # 行号计数
13 : print(line_no, ":", line, end='') # 输出行号和该行内容
2 : # _*_ coding: utf-8 _*_
3 : # @author:森林
4 : # @time:2023/11/22 13:04
5 :
6 : import sys
7 :
-- More --
上一篇文章:【人生苦短,我学 Python】(7)命令行参数、键盘输入【input】和输出【print】
下一篇文章:【人生苦短,我学 Python】(9)分支判断和循环