赞
踩
- >>> fr=open('readme.txt')
- >>> help(fr.readlines)
- Help on built-in function readlines:
-
- readlines(hint=-1, /) method of _io.TextIOWrapper instance
- Return a list of lines from the stream.
-
- hint can be specified to control the number of lines read: no more
- lines will be read if the total size (in bytes/characters) of all
- lines so far exceeds hint.
_io.TextIOWrapper 实例的 readlines(hint=-1, /) 方法
从流中返回行列表。
可以指定 hint 来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过hint,则不会读取更多行。
- >>> f=open('readme.txt')
- >>> f.readlines()
- ['1\n', '22\n', '\n', '333']
为了进一步搞清楚hint,我写了一个函数来演示
- def readlinesFile(filename,nbyte):
- '''
- 探索f.readlines(i)中i的作用,典型的调用形式:
- readlinesFile('readme.txt',12)
- '''
- for i in range(nbyte):
- f=open(filename)
- ss=f.readlines(i)
- if i==0:#如果hint=0,先把每一个元素输出
- textline=len(ss)#文件的总行数
- ntotalbyte=0#文件的总字数
- nwritebyte=0#已经写了的字节数
- for j in range(textline):
- #nwritebyte=ntotalbyte#已经写了的字节数
- ntotalbyte=ntotalbyte+len(ss[j])
- rowbyte=0#已经写了的新行的字节数,用来记一行已经输出的字节个数
- while nwritebyte<ntotalbyte:#当已写字节<总字节数
- print(f'{nwritebyte+1}:',repr(ss[j][rowbyte])) #repr是为了输出换行符
- nwritebyte=nwritebyte+1
- rowbyte=rowbyte+1
- print(f'行数={textline},字数={ntotalbyte}')
- print(f'f.readlines{i}={ss}')
- f.close()
- >>> readlinesFile('readme.txt',12)
- 1: '1'
- 2: '\n'
- 3: '2'
- 4: '2'
- 5: '\n'
- 6: '\n'
- 7: '3'
- 8: '3'
- 9: '3'
- 行数=4,字数=9
- f.readlines0=['1\n', '22\n', '\n', '333']
- f.readlines1=['1\n']
- f.readlines2=['1\n', '22\n']
- f.readlines3=['1\n', '22\n']
- f.readlines4=['1\n', '22\n']
- f.readlines5=['1\n', '22\n', '\n']
- f.readlines6=['1\n', '22\n', '\n', '333']
- f.readlines7=['1\n', '22\n', '\n', '333']
- f.readlines8=['1\n', '22\n', '\n', '333']
- f.readlines9=['1\n', '22\n', '\n', '333']
- f.readlines10=['1\n', '22\n', '\n', '333']
- f.readlines11=['1\n', '22\n', '\n', '333']
更花哨的readlinesFile
- def readlinesFile(filename,nbyte):
- '''
- 探索f.readlines(i)中i是指什么,典型的调用形式:
- readlinesFile('readme.txt',12)
- '''
- specialByte=[]#存储特殊的字节数用
- for i in range(nbyte):
- with open(filename) as f:#使用with语句就可以不使用f.close()了
- ss=f.readlines(i)
- if(i==0):#如果hint=0,先把每一个元素输出
- print(ss)
- textline=len(ss)#文件的总行数
- ntotalbyte=0#文件的总字数
- nwritebyte=0#已经写了的字节数
- for j in range(textline):
- #nwritebyte=ntotalbyte#已经写了的字节数
- ntotalbyte=ntotalbyte+len(ss[j])
- rowbyte=0#已经写了的新行的字节数,用来记一行已经输出的字节个数
- while nwritebyte<ntotalbyte:#当已写字节<总字节数
- if(nwritebyte is ntotalbyte-1):
- specialByte.append(nwritebyte)
- print(f'\033[0;31;47m{nwritebyte+1:2d}:',repr(ss[j][rowbyte]),'\033[0m')#\033[0m是字体和背景颜色设置,注意可能需要其他库的支持
- else:
- print(f'{nwritebyte+1:2d}:',repr(ss[j][rowbyte]))
- nwritebyte=nwritebyte+1
- rowbyte=rowbyte+1
- print(f'\033[0;31;40m行数={textline:2d},字数={ntotalbyte:2d}\033[0m')
- if i in specialByte:
- print(f'\033[0;31;47mf.readlines{i:<2d}={ss}\033[0m') #<是左对齐
- else:
- print(f'f.readlines{i:<2d}={ss}') #<是左对齐
参考文章:https://blog.csdn.net/weixin_44478378/article/details/104967241
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。