当前位置:   article > 正文

详解python中readlines函数的参数hint_python readlines 参数

python readlines 参数

readlines的帮助信息

  1. >>> fr=open('readme.txt')
  2. >>> help(fr.readlines)
  3. Help on built-in function readlines:
  4. readlines(hint=-1, /) method of _io.TextIOWrapper instance
  5. Return a list of lines from the stream.
  6. hint can be specified to control the number of lines read: no more
  7. lines will be read if the total size (in bytes/characters) of all
  8. lines so far exceeds hint.

Google翻译

_io.TextIOWrapper 实例的 readlines(hint=-1, /) 方法
     从流中返回行列表。
    
     可以指定 hint 来控制读取的行数:如果到目前为止所有行的总大小(以字节/字符为单位)超过hint,则不会读取更多行。

readme.txt中的内容

  1. >>> f=open('readme.txt')
  2. >>> f.readlines()
  3. ['1\n', '22\n', '\n', '333']

为了进一步搞清楚hint,我写了一个函数来演示

readlines函数代码

  1. def readlinesFile(filename,nbyte):
  2. '''
  3. 探索f.readlines(i)中i的作用,典型的调用形式:
  4. readlinesFile('readme.txt',12)
  5. '''
  6. for i in range(nbyte):
  7. f=open(filename)
  8. ss=f.readlines(i)
  9. if i==0:#如果hint=0,先把每一个元素输出
  10. textline=len(ss)#文件的总行数
  11. ntotalbyte=0#文件的总字数
  12. nwritebyte=0#已经写了的字节数
  13. for j in range(textline):
  14. #nwritebyte=ntotalbyte#已经写了的字节数
  15. ntotalbyte=ntotalbyte+len(ss[j])
  16. rowbyte=0#已经写了的新行的字节数,用来记一行已经输出的字节个数
  17. while nwritebyte<ntotalbyte:#当已写字节<总字节数
  18. print(f'{nwritebyte+1}:',repr(ss[j][rowbyte])) #repr是为了输出换行符
  19. nwritebyte=nwritebyte+1
  20. rowbyte=rowbyte+1
  21. print(f'行数={textline},字数={ntotalbyte}')
  22. print(f'f.readlines{i}={ss}')
  23. f.close()

输出

  1. >>> readlinesFile('readme.txt',12)
  2. 1: '1'
  3. 2: '\n'
  4. 3: '2'
  5. 4: '2'
  6. 5: '\n'
  7. 6: '\n'
  8. 7: '3'
  9. 8: '3'
  10. 9: '3'
  11. 行数=4,字数=9
  12. f.readlines0=['1\n', '22\n', '\n', '333']
  13. f.readlines1=['1\n']
  14. f.readlines2=['1\n', '22\n']
  15. f.readlines3=['1\n', '22\n']
  16. f.readlines4=['1\n', '22\n']
  17. f.readlines5=['1\n', '22\n', '\n']
  18. f.readlines6=['1\n', '22\n', '\n', '333']
  19. f.readlines7=['1\n', '22\n', '\n', '333']
  20. f.readlines8=['1\n', '22\n', '\n', '333']
  21. f.readlines9=['1\n', '22\n', '\n', '333']
  22. f.readlines10=['1\n', '22\n', '\n', '333']
  23. f.readlines11=['1\n', '22\n', '\n', '333']

总结:

  1. hint 是要输出显示的字节数
  2. hint 默认等于-1,就是以列表的形式读出所有内容
  3. hint = 0时,效果等同于-1
  4. hint 所指的字节数正好是换行符的话,则实际输出是 hint+1

更花哨的readlinesFile

  1. def readlinesFile(filename,nbyte):
  2. '''
  3. 探索f.readlines(i)中i是指什么,典型的调用形式:
  4. readlinesFile('readme.txt',12)
  5. '''
  6. specialByte=[]#存储特殊的字节数用
  7. for i in range(nbyte):
  8. with open(filename) as f:#使用with语句就可以不使用f.close()了
  9. ss=f.readlines(i)
  10. if(i==0):#如果hint=0,先把每一个元素输出
  11. print(ss)
  12. textline=len(ss)#文件的总行数
  13. ntotalbyte=0#文件的总字数
  14. nwritebyte=0#已经写了的字节数
  15. for j in range(textline):
  16. #nwritebyte=ntotalbyte#已经写了的字节数
  17. ntotalbyte=ntotalbyte+len(ss[j])
  18. rowbyte=0#已经写了的新行的字节数,用来记一行已经输出的字节个数
  19. while nwritebyte<ntotalbyte:#当已写字节<总字节数
  20. if(nwritebyte is ntotalbyte-1):
  21. specialByte.append(nwritebyte)
  22. print(f'\033[0;31;47m{nwritebyte+1:2d}:',repr(ss[j][rowbyte]),'\033[0m')#\033[0m是字体和背景颜色设置,注意可能需要其他库的支持
  23. else:
  24. print(f'{nwritebyte+1:2d}:',repr(ss[j][rowbyte]))
  25. nwritebyte=nwritebyte+1
  26. rowbyte=rowbyte+1
  27. print(f'\033[0;31;40m行数={textline:2d},字数={ntotalbyte:2d}\033[0m')
  28. if i in specialByte:
  29. print(f'\033[0;31;47mf.readlines{i:<2d}={ss}\033[0m') #<是左对齐
  30. else:
  31. print(f'f.readlines{i:<2d}={ss}') #<是左对齐

效果

参考文章:https://blog.csdn.net/weixin_44478378/article/details/104967241

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/730885
推荐阅读
相关标签
  

闽ICP备14008679号