鱼C论坛

 找回密码
 立即注册
查看: 2358|回复: 12

按指定位置要求显示文本的问题

[复制链接]
发表于 2021-2-22 06:43:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下:
import linecache
def show(file_name,row):
    f1 = open(file_name)
    txt = linecache.getline(file_name)[begin:end]
    print(txt)
file_name = input('请输入文件名:')
row = input('请输入启始和结束位置,用:分隔')
(begin, end) = row.split(':')
show(file_name,row)
运行后报错:
TypeError: getline() missing 1 required positional argument: 'lineno'
百度查了下说是对象没可视化,但是还没学到对象,所以很难理解,请问大佬们这段代码可能是其他原因吗?可以的话应该怎么优化嘞?谢谢啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-22 07:36:26 From FishC Mobile | 显示全部楼层
没用过这个模块,这提示信息是说缺少参数吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-22 08:12:54 | 显示全部楼层
getline()缺少1个必需的位置参数:“lineno”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 21:52:19 | 显示全部楼层
青出于蓝 发表于 2021-2-22 08:12
getline()缺少1个必需的位置参数:“lineno”

请输入文件名:111.txt
请输入启始和结束位置,用:分隔 2:5
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\py作业\一个任务\按行显示.py", line 9, in <module>
    show(file_name,row)
  File "C:\Users\Administrator\Desktop\py作业\一个任务\按行显示.py", line 4, in show
    txt = linecache.getline(file_name)[begin:end]
TypeError: getline() missing 1 required positional argument: 'lineno'
>>>
请问一下,不理解缺的是啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 21:52:54 | 显示全部楼层
wp231957 发表于 2021-2-22 07:36
没用过这个模块,这提示信息是说缺少参数吧

应该是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-22 22:14:02 From FishC Mobile | 显示全部楼层
小智1998 发表于 2021-2-22 21:52
请输入文件名:111.txt
请输入启始和结束位置,用:分隔 2:5
Traceback (most recent call last):

不会百度吗
比如
print linecache.getline('2.1_open.py', 4)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-22 23:29:28 | 显示全部楼层
linecache.getline(filename, lineno, module_globals=None)
从名为 filename 的文件中获取 lineno 行,此函数绝不会引发异常 --- 出现错误时它将返回 '' (所有找到的行都将包含换行符作为结束)。

如果找不到名为 filename 的文件,此函数会先在 module_globals 中检查 PEP 302 __loader__。 如果存在这样的加载器并且它定义了 get_source 方法,则由该方法来确定源行 (如果 get_source() 返回 None,则该函数返回 '')。 最后,如果 filename 是一个相对路径文件名,则它会在模块搜索路径 sys.path 中按条目的相对位置进行查找。


你一个传递的参数是
filename:一个文件的路径
lineno:需要读取的行数,目测是整形,可以测试[5:8]这样传递
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-23 06:30:55 | 显示全部楼层
wp231957 发表于 2021-2-22 22:14
不会百度吗
比如
print linecache.getline('2.1_open.py', 4)

百度了好像都是说getline行数只能读取特定一行,如果要读取指定区间的多行应该怎么写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-23 08:56:04 | 显示全部楼层
小智1998 发表于 2021-2-23 06:30
百度了好像都是说getline行数只能读取特定一行,如果要读取指定区间的多行应该怎么写呢?

你可以尝试getlines  getlines 返回所有行  可以使用切片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-23 20:22:52 | 显示全部楼层
wp231957 发表于 2021-2-23 08:56
你可以尝试getlines  getlines 返回所有行  可以使用切片

恩恩,谢谢回复!
用了getlines以后会报TypeError: slice indices must be integers or None or have an __index__ method
百度这个以后好多说法,不知道我的代码错误类型是啥?,请大佬指点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 15:29:06 | 显示全部楼层
小智1998 发表于 2021-2-23 20:22
恩恩,谢谢回复!
用了getlines以后会报TypeError: slice indices must be integers or None or have an ...

>>> import linecache
>>> linecache.getlines("2.txt")
['\n', '正在 Ping www.a.shifen.com [110.242.68.4] 具有 32 字节的数据:\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '\n', '110.242.68.4 的 Ping 统计信息:\n', '    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),\n', '往返行程的估计时间(以毫秒为单位):\n', '    最短 = 26ms,最长 = 26ms,平均 = 26ms\n']
>>> linecache.getlines("2.txt")[1:3]
['正在 Ping www.a.shifen.com [110.242.68.4] 具有 32 字节的数据:\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n']
>>> linecache.getlines("2.txt")[1:4:-1]
[]
>>> linecache.getlines("2.txt")[4:1:-1]
['来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n']
>>> lst=linecache.getlines("2.txt")
>>> lst
['\n', '正在 Ping www.a.shifen.com [110.242.68.4] 具有 32 字节的数据:\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '\n', '110.242.68.4 的 Ping 统计信息:\n', '    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),\n', '往返行程的估计时间(以毫秒为单位):\n', '    最短 = 26ms,最长 = 26ms,平均 = 26ms\n']
>>> len(lst)
11
>>> lst[4:8]
['来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '来自 110.242.68.4 的回复: 字节=32 时间=26ms TTL=54\n', '\n', '110.242.68.4 的 Ping 统计信息:\n']
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 15:30:58 | 显示全部楼层
小智1998 发表于 2021-2-23 20:22
恩恩,谢谢回复!
用了getlines以后会报TypeError: slice indices must be integers or None or have an ...

lst=linecache.getlines("2.txt")  这个就相当于把文件内容 变成列表
后续所有操作 全都是针对列表操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-24 15:31:52 | 显示全部楼层
小智1998 发表于 2021-2-23 20:22
恩恩,谢谢回复!
用了getlines以后会报TypeError: slice indices must be integers or None or have an ...

只不过这个模块有些坑,他要求原始文件一定是utf8 格式的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表