从本章开始相当于开启了一个新的篇章,之前的内容都是必要的铺垫,所进行的一切都是在主存当中进行的,从这一章开始,要与副存储甚至是网络进行交互
Charpter7
知识点1: 关于open()函数
open()并不是说打开什么文件,而是让文件变得代码可读。
返回值为file handle,这并不是真正的data,而是获取到data的手段
fhandle = open('mbox.txt' , 'r')
其中,参数1为文件名,参数2为模式,分为读和写两种模式。
知识点2: newline character(换行符)
- 注意点1:\n是一个字符,为换行符
- 注意点2:它只有一个字符的长度,而不是两个
- 注意点3:print()会自动生成一个/n
stuff = 'Hello\nGary'
print(stuff)
print(len(stuff))
输出结果为:
Hello
Gary
10
知识点3: FIle Handle as a Sequence 利用文件处理方式打开一个文件时,就会被处理成顺序排列的一行行字符串。每一行都是一行字符串,可以用for来进行迭代。
FIle handle treat the file as a sequence of lines!!!
举例:在字符串当中:【1,2,3,4,5】
用for进行迭代得到的输出为:
1
2
3
4
5
在文件当中 zxczczxczxc
sadfsdvxvsd
zczczxczxczxcz
用for进行迭代的结果为:
zxczczxczxc
sadfsdvxvsd
zczczxczxczxcz
例如:
xfile = open('mbox.txt' , 'r')
for cheese in xfile:
print(cheese)
输出结果为:
asdasdas
asdadasdda
xcvxcvxv
werwerwev
xczxczxczczx
gdfgeryert
zxczxczxcz
注意:读取的文件需要放在工程根目录当中。
同样,类似于字符串的操作,可以数出文件的行数。
fhand = open('mbox.txt')
count = 0
for line in fhand:
count = count + 1
print(count)
输出结果为:
7
知识点4:
上一种方法是将一个文件通过newline切分成一系列的行来阅读,可以通过.read()来阅读完整的文件,但是需要注意的是通过这种方法读取的内容是包括/n的,所以长度需要注意。
fileread = open('mbox.txt' , 'r')
inp = fileread.read()
print(len(inp))
print(inp[:26])
输出结果为:
73
asdasdas
asdadasdda
xcvxcv
知识点5:
实现文件中的搜索功能
xfile1 = open('mbox.txt' , 'r')
for line in xfile1:
if line.startswith('x'):
print(line)
输出结果为:
xcvxcvxv
xczxczxczczx
从以上几个程序的输出结果可以发现一个有趣的现象,就是不同行的输出之间多了一个空格行,这就是之前所提到的print()会自动加一个/n。所以导致了这样的一种现象!
我们同样可以通过之前学过的函数.rstrip来解决这种情况!
xfile2 = open('mbox.txt')
for line in xfile2:
line = line.rstrip() #注意,这里不能只写line.rstrip(),否则输出结果还是一样,因为这些函数是不改变本身的值的,只提供副本!
if line.startswith('x'):
print(line)
输出结果为:
xcvxcvxv
xczxczxczczx
同样也可以进行跳过某一行的操作,例如:
xfile3 = open('mbox.txt')
for line in xfile3:
line = line.rstrip()
if not line.startswith('x'): #跳过不以x开头的行
continue
print(line)
输出结果为:
xcvxcvxv
xczxczxczczx
知识点5:
通过in来选择行
xfile4 = open('mbox.txt')
for line in xfile4:
line = line.rstrip()
if not 'a' in line:
continue
print(line)
输出结果为:
asdasdas
asdadasdda
知识点6:
提示输入文件名
cont = 0
filename = input('Enter the file name ')
xfile5 = open(filename)
for line in xfile5:
line = line.rstrip()
if not 'x' in line:
cont = cont + 1
print('The line without x is: ' , cont)
输出结果为:
The line without x is: 4
这里需要注意的是print的摆放位置的问题,注意程序的结构,避免语段输出4次的情况发生。
那么接下来就要进行引申,如果输入了错误的文件名的话,如何避免报错呢?
try:
xfile5 = open(filename)
for line in xfile5:
line = line.rstrip()
if not 'x' in line:
cont = cont + 1
except:
print('You enter the wrong filename!')
quit()
print('The line without x is: ' , cont)
这里需要注意的是,quit()是退出整个程序,注意与break与continue的区别!