随意输出文件第几行到第几行 问题求助
题目:编写一个程序,用户可以随意输入需要显示的行数。(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容)def file_print(file, paragraph):
(start, end) = paragraph.split(':')
if start == '':
start = 1
else:
start = int(start)
if end == '':
end = -1
else:
end = int(end)
f = open(file)
if start == 1:
if end == -1:
print('''文件%s的从开头到结束的内容如下:''' % file)
else:
print('''文件%s的从开头到第%d行的内容如下:''' % (file, end))
else:
if end == -1:
print('''文件%s的从%d行到结束的内容如下:''' % (file, start))
else:
print('''文件%s的从第%d行到第%d行的内容如下:''' % (file, start, end))
for i in range(start - 1):
f.readline() 我想问一下这行代码为什么可以消耗start之前的内容?调用readline函数的结果是?
num = end - start + 1
if num < 0:
print(f.read()) read()函数不是读取整个文件吗?这里的意思应该是想要输出某一行到结尾的所有内容吧,能给我解释一下吗?谢谢
else:
for i in range(num):
print(f.readline()) 请问这行代码是如何做到从start那行开始循坏num次的(即打印num行内容)?
f.close()
file_name = input(r'请输入要打开的文件(C:\\test.txt):')
paragraph = input('请输入需要显示的行数【格式如13:21或:21或21:】:')
while paragraph == '':
paragraph = input('输入有误,请重新输入:')
file_print(file_name, paragraph)
谢谢各位的帮助!
我查了一下,read()函数,参数代表从文件指针的位置开始打印x个字符,那么请问文件指针位置是如何决定的呢? 本帖最后由 jackz007 于 2019-11-15 19:17 编辑
我把文件读取显示的相关内容作了详细注释,希望能帮助到楼主
for i in range(start - 1): # 如果 start 大于 1 ,就会执行这个循环,并循环 start - 1 次。
f . readline() # 从文件开头起,每次循环读取 1 行,总共读取 start - 1 行,因为并没有把读取内容显示出来,所以,就是楼主所说的消耗掉 start 之前的行的效果
# 现在,已经来到了文件显示的窗口,后面读取的内容只要行计数没有到 end,就是需要显示的内容
num = end - start + 1 # 计算需要显示的行数
if num < 0: # 如果 num < 0 代表显示到文件末尾
print(f.read()) # 读取文件中剩余的全部内容并全部打印
else: # 否则,就是说,需要读取显示有数的几行
for i in range(num): # 那就循环 num 次
print(f . readline())# 每次读取并显示 1 行内容 jackz007 发表于 2019-11-15 18:43
我把文件读取显示的相关内容作了详细注释,希望能帮助到楼主
非常感谢您的解答!
我还想问一下read()函数为什么可以打印剩余的内容,而不是整个文件呢?read函数的文件指针问题您能解答一下吗?如果在read()括号内若有参数代表什么?这个地方为什么不用readline函数呢?谢谢您{:10_275:} zpx1002 发表于 2019-11-15 20:07
非常感谢您的解答!
我还想问一下read()函数为什么可以打印剩余的内容,而不是整个文件呢?read函数的 ...
一般情况下,语句 read(n) 会从文件指针的当前位置开始读取 n 个字符的文件内容,同时,文件指针也会向后推移 n 个字节。如果参数 n 缺失,那么,实际上的缺省参数就是 n = - 1,执行 read() 语句,将从文件指针的当前位置一直读到文件结束,当然,文件指针也会同时到达文件结束。
文本文件一般是按行来进行规划的,因为,文本文件格式自由,可以随意修改,不适合按字符(字节)来计数读取。所以,对文本文件的读取,手段要么是 read() - 读取整个文件,要么是 readlines() 读取所有行,要么就是 readlin() 读取 1 行。如果一次性读取了多行,那么,这些内容以行末的回车符为分割标志,成为可迭代对象,通过 for ... in 循环可以枚举到每一行内容。
例如:
下面的代码读取、显示文件的全部内容:
f = open(file)
for s in f . read():
print(s)
f . close()
下面的代码读取、显示文件的全部内容:
f = open(file)
for s in f . readlines():
print(s)
f . close()
下面的代码跳过文件前 3 行的内容,显示文件剩余的全部内容
f = open(file)
for i in range(3):
f . readline()
for s in f . readlines():
print(s)
f . close()
页:
[1]