如何对从文件中读取的字符串进行切片 解决切片后内容为空问题
问题根因及修复方案
- 文件指针读取耗尽:调用
file.read()会一次性读取当前指针位置到文件末尾的所有内容,执行后指针会停在文件末尾,后续再调用read()/readline()都只能拿到空字符串。如果你的文件中三个整数行之后,d、e、f分别对应独立的行内容,应该统一用readline()读取,不要混用read()。 - 切片返回空的原因:你得到的
f是仅包含1个字符串元素的列表,列表索引从0开始,仅存在索引为0的元素,f[2:10]是取列表中索引2到9的元素,自然返回空列表。如果你需要的是对列表内的字符串做切片,应该先取出列表的第一个元素再操作:f[0][2:10]。 - 打印列表出现括号的原因:你看到的
[]是Python打印列表类型数据时自带的结构标识,不是列表内存储的字符串的一部分,所以对列表元素做replace完全无效。如果你要直接获取字符串内容,取f[0]即可。
修正后代码示例
如果d、e、f各占独立行:
with open('myfile.txt', 'r') as file: a = int(file.readline()) b = int(file.readline()) c = int(file.readline()) # 逐行读取后去除首尾空白再拆分 d = file.readline().strip().split() e = file.readline().strip().split() f = file.readline().strip().split() # 取f内字符串的2到10位切片 f_slice = f[0][2:10] print(f_slice) # 直接获取f内的原始字符串,无列表括号 f_str = f[0] print(f_str)
如果三个整数行之后的所有内容需要拆分后分别赋值给d、e、f:
with open('myfile.txt', 'r') as file: a = int(file.readline()) b = int(file.readline()) c = int(file.readline()) # 一次性读取剩余所有内容拆分 rest_content = file.read().split() # 按实际需求调整切片范围,示例为d取前3个、e取中间2个、f取剩余所有 d = rest_content[:3] e = rest_content[3:5] f = rest_content[5:]
内容的提问来源于stack exchange,提问作者Gabbisen
相关产品推荐
相关产品推荐

