fightclub 发表于 2022-9-15 23:05:08

关于文件读取的一些问题

代码如下:
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: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>

jackz007 发表于 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])
      楼主不妨试试

txxcat 发表于 2022-9-15 23:28:43

你可能观察结果没有留意到实际上去掉end参数后,是打印一行的内容再打印一行空行,因为readline读取一行里面包括了一个换行符,而print默认会加上一个换行符,这样就会产生空行,但是读取的内容还是连续的。比如你选了3行,去掉end参数后会打印6行,每打印一行内容后跟着一个空行,并没有漏掉内容。

Twilight6 发表于 2022-9-16 11:46:53


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

导致你本身返回字符串带有 换行符,自己 print 函数又打印了一次换行符

fightclub 发表于 2022-9-16 12:15:13

临时号 发表于 2022-9-15 23:11
我这边没问题啊

你是不是把我的那个代码复制了?我那个代码是正常的。

fightclub 发表于 2022-9-16 12:18:17

jackz007 发表于 2022-9-15 23:25
因为 readline() 读取到的每行文本的最后一个字符一定是 '\n',如果把 print(, end = '') 去掉,那么 ...

ok,我试试看{:5_109:}

fightclub 发表于 2022-9-16 12:21:04

fightclub 发表于 2022-9-16 12:15
你是不是把我的那个代码复制了?我那个代码是正常的。

啊确实没问题哈哈哈
页: [1]
查看完整版本: 关于文件读取的一些问题