python学习笔记11(Files)

从本章开始相当于开启了一个新的篇章,之前的内容都是必要的铺垫,所进行的一切都是在主存当中进行的,从这一章开始,要与副存储甚至是网络进行交互
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的区别!

猜你喜欢

转载自blog.csdn.net/weixin_43593303/article/details/89366011
今日推荐