import pathlib file_path = 'vocab.txt' vocab = pathlib.Path(file_path).read_text().splitlines() print(len(vocab)) count = 0 with open(file_path, 'r', encoding='utf8') as f: for line in f: count += 1 print(count)Las dos cuentas son 2122 y 2120. ¿No deberían ser iguales?
Entonces, mirando la documentación de str.splitlines , vemos que los delimitadores de línea para este método son un superconjunto de "nuevas líneas universales":
Este método se divide en los siguientes límites de línea. En particular, los límites son un superconjunto de nuevas líneas universales.
| Representación | Descripción |
|---|---|
\n | Linea de alimentación |
\r | Retorno de carro |
\r\n | Retorno de carro + Avance de línea |
\v o \x0b | Tabulación de línea |
\f o \x0c | Avance de formulario |
\x1c | Separador de archivos |
\x1d | Separador de grupos |
\x1e | Separador de registros |
\x85 | Siguiente línea (Código de control C1) |
\u2028 | Separador de línea |
\u2029 | Separador de párrafo |
Una línea para un archivo de texto utilizará de forma predeterminada el enfoqueuniversal de nuevas líneas para interpretar los delimitadores, de los documentos :
Al leer la entrada de la transmisión, si la
newlineesNone, el modo universal de nuevas líneas está habilitado. Las líneas en la entrada pueden terminar en'\n','\r'o'\r\n', y estos se traducen a'\n'antes de devolverse a la persona que llama. Si nueva línea es'', el modo universal de nuevas líneas está habilitado, pero los finales de línea se devuelven a la persona que llama sin traducir. Si nueva línea tiene cualquiera de los otros valores legales, las líneas de entrada solo terminan con la cadena dada y el final de la línea se devuelve a la persona que llama sin traducir.