Python为什么看不到文件中的所有行?

2024-04-27 04:57:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python按以下方法计算文件中的行数:

n = 0
for line in file('input.txt'):
   n += 1
print n

我在Windows下运行这个脚本。你知道吗

然后我使用Unix命令计算同一文件中的行数:

wc -l input.txt

使用Unix命令计数会产生大量的行。你知道吗

所以,我的问题是:为什么Python看不到文件中的所有行?还是一个定义问题?你知道吗


Tags: 文件方法in命令txt脚本forinput
1条回答
网友
1楼 · 发布于 2024-04-27 04:57:25

您很可能有一个包含一个或多个DOS EOF(CTRL-Z)字符的文件,ASCII码位0x1A。当Windows以文本模式打开文件时,它仍将遵循旧的DOS语义,并在每次读取该字符时都将执行文件。见Line reading chokes on 0x1A。你知道吗

只有以二进制模式打开文件,才能绕过这种行为。若要执行此操作并仍计算行数,您有两个选项:

  • 读入块,然后计算每个块中的行分隔符数:

    def bufcount(filename, linesep=os.linesep, buf_size=2 ** 15):
        lines = 0
        with open(filename, 'rb') as f:
            last = ''
            for buf in iter(f.read, ''):
                lines += buf.count(linesep)
                if last and last + buf[0] == linesep:
                    # count line separators straddling a boundary
                    lines += 1
                if len(linesep) > 1:
                    last = buf[-1]
        return lines
    

    考虑到在Windows上os.linesep设置为\r\n,根据需要调整文件;在二进制模式下,行分隔符不会转换为\n

  • 使用^{}io文件对象集总是以二进制模式打开文件,然后自己进行翻译:

    import io
    
    with io.open(filename) as f:
        lines = sum(1 for line in f)
    

相关问题 更多 >