|
5鱼币
def file_view(file_name,line_num):
if line_num.strip() == ':':
begin = '1'
end = '-1'
(begin,end) = line_num.split(':')
if begin == '':
begin == '1'
if end == '':
end = '-1'
if begin == '1' and end == '-1':
prompt = '的全文'
elif begin == '1':
prompt = '从开始到%s' % end
elif end == '-1':
prompt = '从%s到结束' % begin
else:
prompt = '从%s行到%s行' % (begin,end)
print('文件%s%s的内容如下:\n' % (file_name,prompt))
begin = int(begin) - 1
end = int(end)
lines = end - begin
f = open(file_name)
for i in range(begin):
f.readline()
if lines < 0:
print(f.read())
else:
for j in range(lines):
print(f.readline,end='')
f.close()
file_name = input(r'请输入要打开的文件(C:\\test.txt):')
line_num = input('请输入需要显示的行数【格式如 13:21 或 :21 或 21: 或 : 】:')
file_view(file_name,line_num)
这段程序为什么会报错呢?
本帖最后由 jackz007 于 2020-11-4 01:18 编辑
- def file_view(file_name,line_num):
- if line_num.strip() == ':': # 无效代码
- begin = '1' # 无效代码
- end = '-1' # 无效代码
- (begin,end) = line_num.split(':') # 这一句导致前面的 3 行代码完全失效!
-
- if begin == '':
- begin == '1' # 注意:这里赋值使用了 ==,导致当 begin == '' 时,int(begin) 出错
- if end == '':
- end = '-1'
复制代码
上述代码修改过后,也只能完成全文件内容的读取和显示,一旦实际指定 begin 、end 其中的任何一个或两个,读取文件的操作依然会奔溃,主要原因是,读取文件的循环是靠 begin 和 end 而不是文件的实际行数在控制,读取文件靠 readlin() ,这就产生出一个问题,如何保证循环次数恰好能从头到尾读完文件,以便保证每次读文件的操作都是有效的,也就是说,每一次都是在文件没有结束的情况下读取的,很显然,这些都无法得到保证,而这就是引起奔溃的直接原因。所以,结论就是,不可以使用 readline() 来读取文件,当然,我不是说这个方法不能使用,只是不适合本实例的情形。
读取和显示文件内容的代码可以参考下面的代码:
- begin , end = int(begin) , int(end)
- f = open(file_name)
- d = list(f)
- f . close()
- for k in range(len(d)) :
- if k >= begin - 1 and (k <= end - 1 or end == -1) : print(d[k] , end = '')
复制代码
楼主可以自行定位和替换相应的代码。
|
最佳答案
查看完整内容
上述代码修改过后,也只能完成全文件内容的读取和显示,一旦实际指定 begin 、end 其中的任何一个或两个,读取文件的操作依然会奔溃,主要原因是,读取文件的循环是靠 begin 和 end 而不是文件的实际行数在控制,读取文件靠 readlin() ,这就产生出一个问题,如何保证循环次数恰好能从头到尾读完文件,以便保证每次读文件的操作都是有效的,也就是说,每一次都是在文件没有结束的情况下读取的,很显然,这些都无法 ...
|