1、文件操作
读取:
with open(文件位置,读写方式,编码方式) as 变量名:
变量名.read() #读取
例如:
with open('D:\My_project\me.txt', 'r',encoding='utf-8') as my_file:
content = my_file.read()
在Windows系统中,在文件路径中使用反斜杠(\ )而不是斜杠(/ ):
#python3.7 文件操作
# r 只读,默认打开方式,当文件不存在时会报错
# w 只写,当文件不存在时会自动创建文件,文件内容只能是字符串,只能写入字符串
# r+ 可读可写,当文件不存在时会报错
# w+ 可读可写。当文件不存在时会新建
# a 追加文件,不可读
# a+ 追加文件,可读可写
# rb 以二进制读模式打开,只可读
# rb+ 以二进制写读写模式打开,可读可写,当文件不存在时报错
# wb 以位进制写模式打开,只可写
# wb+ 以二进制读写模式打开,可读可写。当文件不存在时新建
# ab 以二进制追加模式打开,追加文件,不可读
# ab+ 以二进制读写模式打开,追加文件。可读可写
单行读取:
with open('me.txt', 'r') as my_file:
for content in my_file:
print('---' + content.rstrip())
使用readline(),readlines()读取单行
with open('me.txt', 'r') as my_file:
line = my_file.readline() #只读取第一行
print(line)
for content in line:
print('---' + content.rstrip())
上边如果更改为:my_file.readlines() ----这是读取每一行,结果是存在list中,结果如右图
结果
写入文件:
with open(文件名,能写的模式(w,r+...)) as 变量名:
变量.write(写入的内容)
with open('me.txt', 'r+') as my_file:
my_file.write('---hello you')
line = my_file.readline()
print(line)
注意 Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str() 将其转换为字符串格式。
写入多行时,可以加入换行字符:
my_file.write('---hello you \n')
2、异常
try:
程序块
excep 异常名:
异常处理
例如:
try:
print(5 / 0)
except ZeroDivisionError:
print('error')
else:
print("ok")
结果为: error
try:
print(5 / 1)
except ZeroDivisionError:
print('error')
else:
print("ok")
结果为: 5.0
ok
try-except-else 代码块的工作原理大致如下:Python尝试执行try 代码块中的代码;只有可能引发异常的代码才需要放在try 语句中。有时候,有一些仅在try 代码块成功 执行时才需要运行的代码;这些代码应放在else 代码块中。except 代码块告诉Python,如果它尝试运行try 代码块中的代码时引发了指定的异常,该怎么办。
FileNotFoundError 文件异常
方法split() 以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。
Python有一个pass 语句,可在代码块中使用它来让Python 什么都不要做
3、存储数据
函数json.dump() 接受两个实参:要存储的数据以及可用于存储数据的文件对象。
使用函数json.load() 加载存储在文件名.json中的信息,并将其存储到变量中
4、测试
Python标准库中的模块unittest 提供了代码测试工具。
例如:
first.py
def get_formatted_name(first, last, middle=''): if middle:
full_name = first + ' ' + middle + ' ' + last
else:
full_name = first + ' ' + last
return full_name.title()
test.py
import unittest
from first import get_formatted_name
class NamesTestCase(unittest.TestCase):
def test_first_last_name(self):
formatted_name = get_formatted_name('janis', 'joplin')
self.assertEqual(formatted_name, 'Janis Joplin')
print(formatted_name)
def test_first_last_middle_name(self):
formatted_name = get_formatted_name('wolfgang', 'mozart', 'amadeus')
self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')
print(formatted_name)
unittest.main()
以test
开头的方法就是测试方法,不以test
开头的方法不被认为是测试方法,测试的时候不会被执行。
unittest.TestCase
提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们所期望的。
setUp与tearDown
可以在单元测试中编写两个特殊的setUp()
和tearDown()
方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。
setUp()
和tearDown()
方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()
方法中连接数据库,在tearDown()
方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:
class TestDict(unittest.TestCase):
def setUp(self):
print 'setUp...'
def tearDown(self):
print 'tearDown...'
可以再次运行测试看看每个测试方法调用前后是否会打印出setUp...
和tearDown...
。