鱼C论坛

 找回密码
 立即注册
查看: 3227|回复: 7

[已解决]关于文件读取的一些问题

[复制链接]
发表于 2022-9-15 23:05:08 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
file_name = input('请输入要打开的文件(C:\\test.txt):')
f = open(file_name)
lines = int(input('请输入需要显示该文件前几行:'))
print('文件%s的前%d行的内容如下:'%(file_name,lines))
line = 1
while line <= lines:
    print(f.readline(),end = '')
    line += 1
f.close()
为什么倒数第三行去掉end=''就会出现读取的不是连续的而是每读一行漏一行的情况?print函数的end='/n'不就是打印出来会多出一行空白的吗?为什么还会影响到文件的读取?
最佳答案
2022-9-15 23:25:10
本帖最后由 jackz007 于 2022-9-16 00:45 编辑

      因为 readline() 读取到的每行文本的最后一个字符一定是 '\n',如果把 print(, end = '') 去掉,那么,文本本身自带一个 '\n',每次调用 print(, end = '\n') 又会多加一个 '\n' ,相当于每行文本的末尾带了 2 个 '\n' 字符,于是,就会看到每打印一行文本就会空一行的现象。

      如果要为 print() 去掉 end = '' 选项,那么,这一句:
    print(f.readline(),end = '')
       可以改为:
    print(f.readline()[: -1])
        楼主不妨试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-9-15 23:11:21 | 显示全部楼层
本帖最后由 临时号 于 2022-9-15 23:30 编辑

我这边没问题啊
D:\command\Python>cat 1.txt
hello
world
nihao
D:\command\Python>python test.py
请输入要打开的文件(C:\test.txt):1.txt
请输入需要显示该文件前几行:2
文件1.txt的前2行的内容如下:
hello

world


D:\command\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-15 23:25:10 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-9-16 00:45 编辑

      因为 readline() 读取到的每行文本的最后一个字符一定是 '\n',如果把 print(, end = '') 去掉,那么,文本本身自带一个 '\n',每次调用 print(, end = '\n') 又会多加一个 '\n' ,相当于每行文本的末尾带了 2 个 '\n' 字符,于是,就会看到每打印一行文本就会空一行的现象。

      如果要为 print() 去掉 end = '' 选项,那么,这一句:
    print(f.readline(),end = '')
       可以改为:
    print(f.readline()[: -1])
        楼主不妨试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-15 23:28:43 | 显示全部楼层
你可能观察结果没有留意到实际上去掉end参数后,是打印一行的内容再打印一行空行,因为readline读取一行里面包括了一个换行符,而print默认会加上一个换行符,这样就会产生空行,但是读取的内容还是连续的。比如你选了3行,去掉end参数后会打印6行,每打印一行内容后跟着一个空行,并没有漏掉内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-16 11:46:53 | 显示全部楼层

readline() 方法按行读取文件,返回的字符串中会附带换行符的,所以当你 end = ""  去掉后 print 函数 end 就变回默认值 \n

导致你本身返回字符串带有 换行符,自己 print 函数又打印了一次换行符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-16 12:15:13 | 显示全部楼层

你是不是把我的那个代码复制了?我那个代码是正常的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-16 12:18:17 | 显示全部楼层
jackz007 发表于 2022-9-15 23:25
因为 readline() 读取到的每行文本的最后一个字符一定是 '\n',如果把 print(, end = '') 去掉,那么 ...

ok,我试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-16 12:21:04 | 显示全部楼层
fightclub 发表于 2022-9-16 12:15
你是不是把我的那个代码复制了?我那个代码是正常的。

啊确实没问题哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 21:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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